我在ActiveMQ中使用异步消息使用者 . 我的制作人工作正常,并向队列发送消息 . 现在,我的异步消息使用者正在等待onMessage()被调用,这种情况从未发生过 . 所以,问题是:
-
Async Consumer不使用消息 .
-
消息堆积在队列的待处理消息中 .
ActiveMQ日志的快照还显示了许多在挂起状态下堆积的消息:
2015-08-31 09:54:45,331 | DEBUG | queue://SampleQ1, subscriptions=0, memory=0%, size=517, pending=0 <b>toPageIn</b>: 78, Inflight: 0, <b>pagedInMessages.size</b> 439, <b>pagedInPendingDispatch.size</b> 438, enqueueCount: 529, dequeueCount: 12, memUsage:2971237 | org.apache.activemq.broker.region.Queue | Queue:SampleQ1
我无法弄清问题究竟在哪里 .
计数:
-
toPageIn 78
-
pagedInMessages.size 439
-
pagedInPendingDispatch.size 438
只是不断增加,消息仍未传递给消费者 .
它是服务器端问题还是客户端问题?
1 回答
浏览ActiveMQ错误列表遇到了一个与我所经历的相似的错误 .
https://issues.apache.org/jira/browse/AMQ-2955
总而言之,我的Queue无法及时向随机实例的异步消费者传递消息 . 一旦发生此事件,我会在待处理消息中找到消息的构建,并且排队的消息数与消息出列的消息不匹配 .
在链接中提到的bug会讨论持久存储的kahaDB在一些不一致的状态下导致消息传递到停顿状态 . 正如错误分析中所提到的,activemq.xml中的ActiveMQ配置解决了这个问题 .