HornetQ:删除队列

时间:2016-01-21 16:07:00

标签: java spring jms wildfly hornetq

我有一个简单的测试用例,我将一个 HornetQ服务器(V2.4.7.Final)作为Spring上下文的一部分。这非常有效,我可以通过JMS,HornetQ API和/或JMX访问队列。

测试用例

测试用例应该在开始时清空队列,检查它是否为空,然后向队列添加10条消息。只要此队列中没有使用者,就可以使用管理队列JMSQueueControl。甚至通过JMX对队列进行一些操作也运行良好。

问题描述

只要我使用Spring配置向此队列添加消息侦听器 - 并且侦听器按预期使用消息 - 我无法从队列中删除所有消息。既没有通过JMX调用方法,也没有管理队列,也没有JMSQueueControl正在工作,即方法被无异常调用,但它们没有效果。

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

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

1 个答案:

答案 0 :(得分:6)

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

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

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

您可以在此处阅读有关HornetQ Flow控件的更多信息http://www.ozgrid.com/forum/showthread.php?t=61068