ActiveMQ无法从队列中取走消息

9
我最近将一个服务器从ActiveMQ 5.8升级到最新版本(5.11.1)。自那以后,我注意到有时候消息会在特定队列中积累并且不被删除。
我们的架构只有一个生产者和一个消费者。我可以看到消费者仍然连接着,但是消息从生产者处堆积起来。我的解决方案是通过Web控制台删除队列。之后,我立即看到消费者重新连接并开始处理消息。
如果相关的话,在这种情况下,生产者正在运行基于.NET的NMS,而消费者正在运行Java 1.7上的JMS。

如果您断开/重新连接消费者,它会起作用吗?删除队列似乎是一种“蛮力修复”。 - SubOptimal
@SubOptimal 很好的问题,实际上我不确定答案。在应用程序运行时,我没有任何钩子来断开/重新连接消费者。也不知道如何检测它处于这种卡住状态的方法,因为从它的角度来看,消息只是没有进来。 - Ternary
2
一旦通讯再次中断,您可以通过使用JConsole的JMX接口将与类org.apache.activemq.transport.TransportLogger相关的记录器的日志级别更改为DEBUG。然后您应该能够看到经纪人之间的通讯。也许这可以解释发生了什么。 - SubOptimal
2个回答

3
当消费者连接到队列时,请从Web控制台检查队列中未提交的消息数量。如果它大于零并且长时间不变,这意味着您的消费者在读取输入消息时遇到了一些问题。
如果以上情况属实,则可能是因为生产者正在发送不符合JMS规范的文件。

这是一个不错的东西可以尝试,我会去做并回报。谢谢! - Ternary
“未提交消息数量”是指控制台中的“待处理消息数”吗?我知道该值不为零,如果我点击队列,我可以看到消息的内容,至少有效载荷看起来是有效的,并且与生产者发送的内容一致。 - Ternary

1

最近我在创建一个将所有消息从一个队列移动到另一个队列的工具时遇到了这个问题。

我可以看到我已经连接到我的 AMQ 实例,并且我可以看到我创建的监听器,但它们就是不会从挂起状态转移到我的监听器...

我忘记在我的队列连接上调用 Start() 方法了。:/


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接