代码之家  ›  专栏  ›  技术社区  ›  ShinySpiderdude

hornetq“listMessagesAsJson”不工作

  •  2
  • ShinySpiderdude  · 技术社区  · 12 年前

    我现在使用hornetq有一段时间了,直到最近还可以。 我有这样一个问题:我有一些消息“卡”在队列中(我在客户端确认模式下处理,所以问题可能是我的一些消费者持有这些消息,而没有发送确认)。 我正在使用JConsole查看队列,我可以看到消息计数器正在上升,但当我尝试“listMessagesAsJson”时,我得到了一个空结果 作为参考,我尝试将它们发送到死后队列(事务处理模式,并故意抛出RuntimeException),在DLQ中,我实际上可以看到messageCounter和“listMessagesAsJson”实际上在DLQ上工作(我正在获取消息列表) 然而,我无法理解DLQ和我的普通队列之间的区别。 有人能帮我吗? 提前谢谢

    2 回复  |  直到 12 年前
        1
  •  2
  •   Clebert Suconic    12 年前

    我们添加了另一种方法,称为listDeliveringMessages,它可以为您提供飞行中的消息,并让您了解正在发生的事情。

    这是作为 https://issues.jboss.org/browse/HORNETQ-763

    您目前正在使用2.2.14(根据我们在hornetq论坛上的讨论),其中不包括修复程序。。

    有关更多详细信息,您可以参考此github提交: https://github.com/hornetq/hornetq/commit/3812ee77100c473489f72f36e5078a56d37e5c19

        2
  •  1
  •   Nicholas    12 年前

    我怀疑你关于客户没有确认消息的说法是正确的。队列中已传递给消费者但尚未确认(或TX已提交)的消息处于这种灰色状态,必须保留这些消息,以防客户端回滚,并且必须重新传递消息,但同时,它们基本上对其他任何人都不可用,因为它们只能传递给一个消费者。我敢打赌,如果你有 n 队列中的消息,但没有活动的使用者 列表消息AsJson 操作将毫无问题地列出它们。

    DLQ之所以有效,是因为运行时异常是终端异常,并且代理知道消息已被消费者拒绝,因此它不在“灰色”区域。