You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ActiveMQ Artemis双节点集群单向消息分发故障求助

环境信息
  • OS: Ubuntu 20.04
  • ActiveMQ Artemis: 2.25.0
  • Java: OpenJDK 11.0.16
问题现象

搭建了由broker_1064和broker_1164组成的双节点集群,编写Producer与Consumer程序测试跨节点消息收发:

  • Producer向broker_1064的mdms.lpi.test_it队列发送测试消息,Consumer从broker_1164的同队列消费
  • 反向场景:Producer向broker_1164的同队列发消息,Consumer从broker_1064的队列消费
    测试前会清理对应队列。

测试初期双向收发均正常,但运行1至数小时后突然出现单向失效:

  • 仅Producer→broker_1064→broker_1164→Consumer路径正常
  • Producer→broker_1164→broker_1064→Consumer路径无消息,两台broker的该队列消息数均为0,其他队列也存在相同问题。

额外测试结果:

  • 手动向broker_1164的该队列发送3条消息,broker_1064队列消息数为0
  • 启动broker_1064上的Consumer后,broker_1164队列消息数变为0、已确认数为3,但Consumer未收到消息。

当前临时恢复方式:清理一台broker的数据目录并重启可恢复双向通信,且artemis.log无异常日志。集群通过相同命令创建(仅IP和broker名称不同),使用统一的broker.xml配置。

排查及解决建议
  1. 检查集群节点连通性
    • 执行artemis cluster list命令,确认两台broker的集群节点状态,验证broker_1164与broker_1064是否能互相感知。若出现节点失联,排查网络防火墙、端口是否存在间歇性阻断,或集群心跳配置是否合理。
  2. 验证集群转发配置
    • 核对broker.xml中的cluster-connections配置,确保双向集群连接的connector-ref和static-connectors指向正确,无单向配置遗漏。
    • 检查队列的cluster属性是否开启,确认转发规则双向生效,避免出现仅单方向配置转发的情况。
  3. 分析持久化存储
    • 使用artemis data print命令分析broker数据目录下的journal文件,查看是否存在未处理的消息记录或异常条目,排查存储层潜在损坏问题。
    • 临时更换持久化类型(如从journal切换为JDBC),验证是否为存储引擎导致的单向转发失效。
  4. 开启调试日志
    • 修改logging.properties,将org.apache.activemq.artemis.core.server.cluster和org.apache.activemq.artemis.core.server.forwarding的日志级别设为DEBUG,重新运行测试,捕捉失效过程中的隐藏异常。
  5. 检查客户端配置
    • 确认Consumer的连接地址是否配置了集群或故障转移地址,避免仅绑定单节点导致无法接收跨节点消息。
    • 验证Producer的消息确认机制,确保消息确实被broker_1164接收并持久化,而非仅发送成功但未触发转发。
  6. 升级版本验证
    • ActiveMQ Artemis 2.25.0存在部分集群转发相关的已知问题,建议升级至最新稳定版本(如2.30.0及以上),验证问题是否已被修复。

内容的提问来源于stack exchange,提问作者wureka

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 07:10:12