我现在正在使用hornetq一段时间,直到最近才开始使用。 我有这样的问题:我有一些消息在队列中“卡住”(我在客户端确认模式下工作,所以问题可能是我的一些消费者持有消息并且没有发送确认) 。 我正在使用JConsole来查看队列,我可以看到消息计数器正在上升,但是当我尝试“listMessagesAsJson”时,我得到一个空的结果 作为参考,我尝试将它们发送到死后的队列(事务处理模式并故意抛出RuntimeExceptions),在DLQ中我实际上可以看到messageCounter和“listMessagesAsJson”实际上都在DLQ上工作(我正在获取消息列表) ) 但是,我无法理解DLQ和我的普通队列之间的区别。 有人可以帮我从这里出去吗? 提前致谢
答案 0 :(得分:2)
我们添加了另一个名为listDeliveringMessages的方法,它可以为您提供正在进行的消息,并让您了解正在发生的事情。
这是https://issues.jboss.org/browse/HORNETQ-763
的一部分您目前正在使用2.2.14(根据我们在hornetq论坛上的讨论),其中不包含修复程序..
有关更多详细信息,请参阅此github提交:https://github.com/hornetq/hornetq/commit/3812ee77100c473489f72f36e5078a56d37e5c19
答案 1 :(得分:1)
我怀疑你对客户没有收到消息是正确的。队列中已传递给消费者但尚未确认(或TX提交)的消息存在于此灰色状态,必须保留它们以防客户端回滚并且必须重新传递消息,但同时, “其他人基本上无法使用,因为他们只能交付给一个消费者。我敢打赌,如果您的队列中有 n 消息,但没有活跃的消费者, listMessagesAsJson 操作将列出它们没有问题。
DLQ有效,因为运行时异常是终端,并且经纪人知道该消息已被消费者拒绝,因此它不在“灰色”区域内。