ActiveMQ Artemis内部桥接队列隐形消费者问题咨询
1. 控制台显示异常的原因
你遇到的控制台显示1个消费者但列表为空的情况,大概率不是Bug,而是集群连接对应的内部消费者未被Web控制台展示。集群连接(cluster-connection)创建的是broker内部桥接消费者,这类属于系统级内部组件,Web控制台的消费者列表通常只展示客户端应用创建的消费者,不会显示这类内部消费者。
2. 确认队列真实消费者的方法
(1)使用Artemis CLI命令
在broker节点上执行以下命令,查看队列的完整消费者信息(含内部消费者):
./artemis queue stat --name="$.artemis.internal.sf..." --url="tcp://localhost:61616"
输出结果中的Consumers字段会显示真实消费者数量,同时会列出消费者ID、连接来源等细节——内部集群消费者的ID通常带有集群名称、nodeId相关标识。
(2)通过JMX查看
连接到broker的JMX端口(默认1099),定位到org.apache.activemq.artemis域下的Queue MBean,目标队列的Consumers属性会列出所有消费者的详细信息,包括是否为集群连接创建的内部消费者。
(3)检查broker日志
在broker日志中搜索队列名称、cluster-connection或两台节点的nodeId(a8dd3f57-5708-11ed-aef9-a8a15976b7bf/aa352e1f-5708-11ed-a36c-00163ec45fe5),可以找到集群连接创建、销毁消费者的日志记录,以此确认消费者的真实状态。
3. 消息堆积的排查方向
由于该队列用于集群桥接,堆积可能和以下因素有关:
- 集群连接链路异常:即便日志显示桥接成功,仍可能存在间歇性网络波动、会话中断,导致内部消费者无法正常消费,此时CLI/JMX会显示消费者数量异常(比如变为0)。
- 路由配置问题:检查
cluster-connection的forward-when-no-consumers、max-hops等参数,确保消息能正确路由到目标节点。 - 目标节点阻塞:如果masterB上对应的队列存在堆积或消费者阻塞,会导致masterA的内部桥接消费者无法发送消息,进而引发本地队列堆积。
4. 是否为Bug?
从你使用的2.22.0、2.26.0版本来看,控制台不显示内部消费者是设计行为,不属于Bug。但如果CLI/JMX显示的消费者数量和控制台完全不符,或者确实存在消费者丢失导致堆积的情况,可以核对对应版本的官方已知问题,部分旧版本存在集群连接会话异常未自动重建的问题,必要时可升级到最新稳定版测试。
内容的提问来源于stack exchange,提问作者will

