【问题标题】:ActiveMQ Not Taking Messages off QueueActiveMQ 没有将消息从队列中取出
【发布时间】:2015-09-13 23:16:33
【问题描述】:

我最近将一台服务器从 ActiveMQ 从 5.8 升级到了最新的 (5.11.1)。从那以后,我偶尔会注意到消息会在特定队列上堆积,而不会被删除。

我们的架构有一个生产者,一个消费者。我可以看到消费者仍处于连接状态,但来自生产者的消息正在堆积。我的解决方案是通过 Web 控制台删除队列。之后,我立即看到消费者重新连接并且消息再次开始处理。

如果相关,在这种情况下,生产者在 .NET 上运行 NMS,而消费者在 Java 1.7 上运行 JMS。

【问题讨论】:

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

标签: java jms activemq nms


【解决方案1】:

当消费者连接到队列时,请从 Web 控制台查看队列中未提交消息的数量。如果大于零且长时间不变化,说明你的消费者在读取输入消息时遇到了问题。

如果上述情况属实,可能是因为生产者发送的文件不是 jms 投诉的。

【讨论】:

  • 这是很好的尝试,我会这样做并报告。谢谢!
  • “未提交消息的数量”是指控制台中的Number Of Pending Messages 吗?我知道的那个值是非零的,如果我单击队列,我可以看到消息的内容,并且至少有效负载看起来有效并且与生产者发送的内容一致。
【解决方案2】:

我最近在创建一个实用程序以将所有消息从一个队列移动到另一个队列时遇到了这个问题。

我可以看到我已连接到我的 AMQ 实例,并且我可以看到我创建的侦听器,但它们只是不会从 Pending 移动到我的侦听器...

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-12-13
    • 1970-01-01
    • 2014-08-08
    • 2016-10-23
    • 1970-01-01
    • 2015-03-17
    • 2020-12-01
    • 2017-11-06
    相关资源
    最近更新 更多