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:从队列中删除所有消息,不适用于队列中的消费者的主要内容,如果未能解决你的问题,请参考以下文章