mirror of
https://gitee.com/dromara/dax-pay
synced 2026-08-12 07:25:39 +08:00
refactor(artemis): 移除 embedded 模式,恢复 netty 4.2 修复 Linux Lettuce 崩溃
根 pom 删 netty.version=4.1.135 覆盖,恢复 Boot 4.1 默认 netty 4.2.15; common-artemis 删 artemis-jms-server 依赖(fat jar 不再含 EmbeddedActiveMQ, Spring Boot @ConditionalOnClass 自动跳过 embedded 装配); application-dev/prod.yml 删 spring.artemis.embedded 段,mode 固定 native。 根因:netty 4.1 降级曾为修 JDK25+Artemis embedded 的 CleanerJava25 崩溃, 但 Lettuce 7.5.2 针对 netty 4.2 编译,Linux epoll 路径引用 MultiThreadIoEventLoopGroup(4.2 新基类)致 NoClassDefFoundError; 移除 embedded 消除 CleanerJava25 触发点后 netty 恢复 4.2,Lettuce 正常。
This commit is contained in:
@@ -24,13 +24,6 @@
|
||||
<groupId>org.messaginghub</groupId>
|
||||
<artifactId>pooled-jms</artifactId>
|
||||
</dependency>
|
||||
<!-- 嵌入式 Artemis server(提供 EmbeddedActiveMQ + Configuration)
|
||||
常驻 fat jar,使 spring.artemis.mode=embedded 可用;mode=native 时本依赖不被装配路径触发。
|
||||
版本由 Spring Boot BOM 管理。 -->
|
||||
<dependency>
|
||||
<groupId>org.apache.activemq</groupId>
|
||||
<artifactId>artemis-jms-server</artifactId>
|
||||
</dependency>
|
||||
<!-- JSON 序列化 -->
|
||||
<dependency>
|
||||
<groupId>cn.daxpay.open</groupId>
|
||||
|
||||
@@ -34,23 +34,18 @@ spring:
|
||||
lettuce:
|
||||
pool:
|
||||
max-wait: 1000ms
|
||||
# Artemis 消息队列(双模式:native=外置容器 / embedded=内嵌 JVM)
|
||||
# 本地开发默认 embedded:无需启动独立 artemis 容器,broker 内嵌后端 JVM
|
||||
# 如需连外部 broker(联调 docker artemis):设环境变量
|
||||
# ARTEMIS_MODE=native + ARTEMIS_BROKER_URL/USER/PASSWORD
|
||||
# Artemis 消息队列(native 模式:连接外部独立 broker 容器,不再支持内嵌模式)
|
||||
artemis:
|
||||
mode: ${ARTEMIS_MODE:embedded}
|
||||
broker-url: ${ARTEMIS_BROKER_URL:tcp://192.168.1.229:61616}
|
||||
user: ${ARTEMIS_USER:admin}
|
||||
password: ${ARTEMIS_PASSWORD:admin}
|
||||
mode: native
|
||||
# Broker 连接地址
|
||||
broker-url: tcp://192.168.1.229:61616
|
||||
# broker 账号(与容器启动环境变量一致)
|
||||
user: admin
|
||||
password: admin
|
||||
pool:
|
||||
enabled: true
|
||||
max-connections: 10
|
||||
idle-timeout: 30s
|
||||
embedded:
|
||||
enabled: true
|
||||
persistent: true
|
||||
data-directory: ${ARTEMIS_DATA_DIR:./data/artemis}
|
||||
jms:
|
||||
# 会话缓存,提升发送性能
|
||||
cache:
|
||||
|
||||
@@ -40,25 +40,17 @@ spring:
|
||||
lettuce:
|
||||
pool:
|
||||
max-wait: 1000ms
|
||||
# Artemis 消息队列(双模式:native=外置容器 / embedded=内嵌 JVM)
|
||||
# 切换:环境变量 ARTEMIS_MODE=native|embedded(默认 native),无需改代码、不重打包
|
||||
# - native:连接独立 artemis 容器(标准部署),需 ARTEMIS_USER/PASSWORD(installer 注入)
|
||||
# - embedded:broker 内嵌后端 JVM(内存紧张场景省独立 JVM),无需凭证,journal 落 ARTEMIS_DATA_DIR
|
||||
# Artemis 消息队列(native 模式:连接外部独立 broker 容器,不再支持内嵌模式)
|
||||
# 凭证与地址由 installer 注入(ARTEMIS_BROKER_URL / ARTEMIS_USER / ARTEMIS_PASSWORD)
|
||||
artemis:
|
||||
mode: ${ARTEMIS_MODE:native}
|
||||
mode: native
|
||||
broker-url: ${ARTEMIS_BROKER_URL:tcp://artemis:61616}
|
||||
# 凭证空串兜底:embedded 模式不传也不报错;native 模式由 installer 注入真实值
|
||||
user: ${ARTEMIS_USER:}
|
||||
password: ${ARTEMIS_PASSWORD:}
|
||||
pool:
|
||||
enabled: true
|
||||
max-connections: 20
|
||||
idle-timeout: 30s
|
||||
embedded:
|
||||
enabled: true
|
||||
# 持久化:支付超时 / 通知消息重启不丢(journal 落盘)
|
||||
persistent: true
|
||||
data-directory: ${ARTEMIS_DATA_DIR:./data/artemis}
|
||||
jms:
|
||||
cache:
|
||||
enabled: true
|
||||
|
||||
16
pom.xml
16
pom.xml
@@ -57,15 +57,13 @@
|
||||
<ip2region.version>3.3.7</ip2region.version>
|
||||
<wxjava.version>4.8.4.B</wxjava.version>
|
||||
<commonmark.version>0.24.0</commonmark.version>
|
||||
<!-- Netty 版本覆盖(JDK 25 兼容修复):
|
||||
Boot 4.1 BOM 默认 netty 4.2.15,其 CleanerJava25 对"任意 direct ByteBuffer"无法手动清理,
|
||||
直接抛 UnsupportedOperationException: Cannot clean arbitrary ByteBuffer instances;
|
||||
Artemis 内嵌 broker(embedded 模式)加载 NIO journal 时调用
|
||||
NIOSequentialFileFactory.releaseDirectBuffer 未捕获该异常 → 启动失败(AMQ224000)。
|
||||
4.1.135 与 Artemis 2.53 官方声明的 4.1.x 同系,CleanerJava9 在 JDK 25 上可正常清理
|
||||
(invokeCleaner 仍存在,仅 deprecated),且降级链优雅(不支持时 NOOP,不会抛异常)。
|
||||
注意:JDK 26 移除 invokeCleaner 后需再随 Artemis 官方升级同步处理。 -->
|
||||
<netty.version>4.1.135.Final</netty.version>
|
||||
<!-- Netty:用 Boot 4.1 BOM 默认(4.2.x),不覆盖。
|
||||
曾为 embedded Artemis 降到 4.1.135(netty 4.2 的 CleanerJava25 在 JDK25 上对 NIO journal
|
||||
direct ByteBuffer 抛 UnsupportedOperationException → AMQ224000),但 4.1 缺少
|
||||
io.netty.channel.MultiThreadIoEventLoopGroup(netty 4.2 重构后的新基类),导致 Lettuce 7.x
|
||||
(Boot 4.1 自带 Redis 客户端)运行时 NoClassDefFoundError —— 走 Redis 的路径(如 shedlock
|
||||
定时任务抢锁)全炸。embedded 模式与 Lettuce 在 JDK25 不可共存,已弃用回 native 独立容器。
|
||||
若未来重启 embedded,须先确认 Artemis 兼容 netty 4.2。 -->
|
||||
</properties>
|
||||
|
||||
<build>
|
||||
|
||||
Reference in New Issue
Block a user