HornetQ:从队列中删除所有消息,不适用于队列中的消费者

Posted

技术标签:

【中文标题】HornetQ:从队列中删除所有消息,不适用于队列中的消费者【英文标题】:HornetQ: Remove all messages from queue not working with consumer on queue 【发布时间】:2016-04-27 23:38:18 【问题描述】:

我有一个简单的测试用例,我在其中启动了一个 HornetQ 服务器 (V2.4.7.Final) 作为 Spring 上下文的一部分。这很好用,我可以通过 JMS、HornetQ API 和/或 JMX 访问队列。

测试用例

测试用例应该在开始时清空队列,检查它是否为空,然后将 10 条消息添加到队列中。只要此队列上没有消费者,就可以使用管理队列JMSQueueControl。即使通过 JMX 对队列做一些操作也很好。

问题描述

一旦我使用 Spring 配置向此队列添加消息侦听器 - 并且侦听器按预期使用消息 - 我无法从队列中删除所有消息。通过 JMX 进行的方法调用、管理队列和 JMSQueueControl 都不起作用,即方法被毫无例外地调用,但它们没有任何效果。

我想也许我必须在对其内容进行一些修改之前暂停队列,但暂停也不起作用。我可以看到队列是通过 JMX 暂停的,并且在使用 API 时报告了同样的情况,但消费者仍然使用队列中的消息。因此我认为它根本没有被暂停。

我知道没有源代码很难,但从我的角度来看,这都是非常基本的设置,你可以在很多很多教程中找到它。任何人都可以提供建议我做错了什么。如果需要任何源代码,请发表评论,我会添加相关部分。

【问题讨论】:

把代码贴出来就好了。就好像您已暂停队列一样,不应使用消息。 我找到了解决我(类似)问题的方法,请参阅***.com/questions/38974400/… 【参考方案1】:

HornetQ 支持删除代理端队列中的消息。一旦消息被分派给消费者并在消费者上缓冲,就无法使用任何管理 API 从消费者缓冲区中删除消息。

解决此问题的一种方法(如果必须)是通过将 consumer-window-size 设置为 0 来禁用消费者缓冲,但请注意潜在的性能下降。

否则,您需要以编程方式处理它;通过在处理消息之前添加一些有效性检查。

你可以在这里https://docs.jboss.org/hornetq/2.2.5.Final/user-manual/en/html/flow-control.html阅读更多关于HornetQ流量控制的信息

【讨论】:

以上是关于HornetQ:从队列中删除所有消息,不适用于队列中的消费者的主要内容,如果未能解决你的问题,请参考以下文章

Mule ESB HornetQ JMS 消息未传递

如何使用 CLI 从单个队列中删除所有消息?

我可以存储和读取来自 STOMP 队列/主题的消息吗?

Azure 队列触发器不适用于 Java

如何使用 PowerShell 从 MSMQ 消息队列中删除特定消息

队列不适用于线程?