gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 13:47:16 25 4
gpt4 key购买 nike

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

测试用例

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

问题描述

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

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

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

最佳答案

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

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

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

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

关于java - HornetQ:从队列中删除所有消息,不适用于队列中的消费者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34928606/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com