ActiveMQ 消费者挂起

Posted

技术标签:

【中文标题】ActiveMQ 消费者挂起【英文标题】:ActiveMQ Consumer Hangs 【发布时间】:2012-04-18 13:13:05 【问题描述】:

我有一个使用 SSL 传输的 activeMQ 代理。我有大约 10 个使用代理的消费者。我正在使用骆驼来配置我的路线。

每隔一段时间,它就会挂起并且不会消费新消息,即使我重新启动消费者,即使队列中有消息未决。

我开始尝试通过逐个检查我的消费者尝试复制问题来隔离发生这种情况的位置。我终于找到了一个可以重现问题的消费者。它会在一段时间后挂起,但是,如果我转到活动的 MQ 管理控制台并尝试查看队列中的消息,它将再次开始运行。我认为 Jetty 导致连接发生以刷新网页的队列,从而解除了我遇到的一些线程问题。我应该如何调试这个?

谢谢

【问题讨论】:

听起来像是 ActiveMq 的问题。如果您遇到这种情况并开始新客户,他会收到消息吗? 不,不一定。我之前试过关掉consume,然后再打开,它不会回到队列中获取消息。 【参考方案1】:

对你来说为时已晚,但我遇到了同样的问题,问题是我试图使用与队列中的内容相同的连接将内容添加到队列中。

一旦我将它们分开(两个完全不同的上下文,一个用于生产,另一个用于消费),问题就自行解决了。

【讨论】:

【参考方案2】:

我的一个同事偶然发现了一些有趣的东西,我刚刚在网上找到了一个解释:http://activemq.2283324.n4.nabble.com/Consumer-is-not-able-to-pick-messages-from-queue-td2531722.html

显然,当您有一个选择器并且所有消息都在同一个队列中时,可以填充一个页面大小。这发生在我们身上——我还没有启动消费者,所以我最终得到了一整页消息,其中包含不同消费者的选择器,这导致我正在运行的消费者没有收到任何额外的工作发送给它。

【讨论】:

【参考方案3】:

尝试将队列预取设置为 1,以促进更好地分布在消费者之间并减少特定消费者的“卡住”消息

见http://activemq.apache.org/what-is-the-prefetch-limit-for.html

【讨论】:

以上是关于ActiveMQ 消费者挂起的主要内容,如果未能解决你的问题,请参考以下文章

JBoss 和 ActiveMQ 之间挂起的 Socket.read() 线程

消费者没有收到来自 ActiveMQ 的消息

ActiveMQ:单个生产者,多个消费者

activemq 通配符消费者如何工作?

如何将消息从 Activemq 推送到消费者

activemq消息一直pending