Apache Artemis MBean的listMessages操作在MessageCount>0时返回空如何排查
问题排查与解决方案
1. 调整方法调用参数
ActiveMQ Artemis 的 listMessages/listMessagesAsJSON 方法默认仅返回就绪待消费、未被预取投递的消息,其统计逻辑与队列 MessageCount 不一致:
MessageCount统计的是队列总消息量,包含已被消费者预取但未确认的投递中消息、定时调度的延迟消息、待消费消息三类- 方法默认重载
listMessagesAsJSON(String filter)仅返回待消费消息,投递中、调度中消息会被过滤 - 修复方式:调用时显式传入第二个参数开启全量消息查询,示例:
listMessagesAsJSON("", true),空字符串代表不过滤任何消息,true代表包含所有状态的消息
2. 检查Broker核心配置
如果参数调整后仍无返回,检查 broker.xml 中的如下配置项:
- 全局消息管理开关是否开启:
<!-- 该配置控制是否允许通过管理接口查询消息明细,默认值为true,若手动修改为false会导致listMessages返回空 --> <message-management-enabled>true</message-management-enabled> - 对应队列的
management-enabled属性是否为true,如果是自动创建的队列,检查地址级别的默认队列配置是否禁用了管理能力。
3. 排查过滤规则与大小限制
- 如果调用时传入了自定义消息过滤表达式,先替换为空字符串测试,确认是否是过滤规则匹配错误导致无返回
- 检查全局配置
management-message-attribute-size-limit,默认值为1MB,若单条消息的属性总大小超过该阈值,会被过滤不返回,可临时调大该值验证。
4. 版本兼容性验证
如果队列中都是非持久化消息,部分2.20之前的Artemis版本存在内存中非持久化消息无法被管理接口检索的已知Bug,可升级到当前大版本的最新小版本修复。
内容的提问来源于stack exchange,提问作者Tofufisch
相关产品推荐
相关产品推荐

