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

ActiveMQ Artemis连接异常排查:已配置端口仍报错

ActiveMQ Artemis 三类异常排查与解决方案

1. 消息因重发超限转入死信队列(DLQ)

原因分析

消息多次重试投递失败(默认超过10次),Artemis会自动将这类无法正常投递的消息转入DLQ,避免无限重试消耗系统资源。常见触发场景:

  • 消费者持续无响应、崩溃或未正确订阅队列
  • 消息本身存在格式问题(序列化/反序列化失败)
  • 队列资源不足(内存/磁盘阈值触发限流)

解决方案

  • 调整重发策略:在broker.xml的address-settings节点里修改max-delivery-attempts值,按需提高重试次数:
    <address-setting match="#">
      <max-delivery-attempts>20</max-delivery-attempts>
      <!-- 其他配置保持不变 -->
    </address-setting>
    
  • 排查投递失败根因:通过Artemis控制台或CLI工具查看DLQ内的消息内容,定位具体问题:
    ./artemis queue browse --name DLQ
    
  • 处理DLQ消息:根据业务需求选择重新投递或删除:
    # 将指定消息从DLQ移回原队列
    ./artemis queue move --source DLQ --target your-target-queue --message-id 123456
    

2. MQTT/STOMP客户端报「AMQ224096: protocol CORE not found」

原因分析

虽然配置了对应协议的acceptor,但客户端连接时未指定正确协议,或者acceptor配置存在参数错误(比如协议名称写错、端口冲突),导致服务器无法匹配到对应协议的处理逻辑。

解决方案

  • 验证acceptor配置:检查broker.xml的acceptors节点,确保MQTT/STOMP的协议参数正确:
    <acceptors>
      <!-- 单独的MQTT acceptor -->
      <acceptor name="mqtt">tcp://0.0.0.0:1883?protocols=MQTT;tcpSendBufferSize=1048576;tcpReceiveBufferSize=1048576</acceptor>
      <!-- 单独的STOMP acceptor -->
      <acceptor name="stomp">tcp://0.0.0.0:61613?protocols=STOMP;tcpSendBufferSize=1048576;tcpReceiveBufferSize=1048576</acceptor>
    </acceptors>
    
    注意:如果是共用acceptor(比如同时支持CORE/MQTT/STOMP),需在protocols参数里包含所有需要的协议,避免遗漏。
  • 检查客户端连接参数:确认MQTT客户端使用MQTT协议版本(3.1/3.1.1/5.0),STOMP客户端明确指定STOMP协议,不要错误配置为CORE协议。比如MQTT客户端的连接URL应为tcp://your-broker-ip:1883,并设置对应的MQTT协议参数。
  • 排查端口占用:用命令检查端口是否被其他进程抢占:
    netstat -tulpn | grep -E "1883|61613"
    

3. 连接重置(Connection reset)错误

原因分析

多由网络层面问题或连接超时配置不合理导致:

  • 防火墙自动断开空闲连接
  • 客户端异常退出未主动关闭连接
  • 服务器与客户端的TCP参数不匹配(比如超时时间、缓冲区大小)
  • 服务器资源不足(内存/磁盘耗尽)触发连接断开

解决方案

  • 优化网络与防火墙配置:
    • 确认客户端(172.16.8.100)与服务器之间的端口双向连通
    • 调整防火墙的空闲会话超时时间,或在acceptor配置中启用TCP保活:
      <acceptor name="mqtt">tcp://0.0.0.0:1883?protocols=MQTT;tcpKeepAlive=true;tcpKeepIdle=300000;tcpKeepInterval=60000</acceptor>
      
  • 调整连接超时设置:在broker.xml中设置合理的连接存活时间,避免服务器过早断开连接:
    <address-setting match="#">
      <connection-ttl>600000</connection-ttl> <!-- 10分钟 -->
      <connection-ttl-check-interval>300000</connection-ttl-check-interval> <!-- 5分钟检查一次 -->
    </address-setting>
    
  • 排查客户端异常:确认客户端在退出时主动调用断开连接方法,避免遗留无效连接;同时检查客户端的TCP缓冲区大小是否与服务器端匹配。
  • 查看详细日志:在artemis.log中查找连接重置的堆栈信息,定位是客户端还是服务器端触发的断开,是否存在关联的资源不足异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 13:00:36