HornetQ:删除队列中不与消费者一起使用的队列中的所有消息

Flo*_*ian 11 java spring jms hornetq wildfly

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

测试用例

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

问题描述

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

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

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

小智 6

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

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

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

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