Java HornetQ用户在关闭连接后需要很长时间才能停止

Java HornetQ用户在关闭连接后需要很长时间才能停止,java,jms,hornetq,Java,Jms,Hornetq,我有一个java程序,200个并发消费者从独立的HornetQ服务器提供的队列中读取数据。侦听器只需从队列中拾取一个项目,随机等待1.5-2.5秒,然后确认返回队列(这是客户端确认) 现在,我在队列中创建了20.000条消息,启动这200个消费者,5秒钟后,我在连接上调用close(也尝试了stop)方法。到那时,消费者已经处理了大约1000条信息。但是,他们没有完成当前的工作,也没有从队列中收到更多消息,而是花了3分钟来处理另外大约10.000条消息,最后才停止并结束应用程序(connecti

我有一个java程序,200个并发消费者从独立的HornetQ服务器提供的队列中读取数据。侦听器只需从队列中拾取一个项目,随机等待1.5-2.5秒,然后确认返回队列(这是客户端确认)

现在,我在队列中创建了20.000条消息,启动这200个消费者,5秒钟后,我在连接上调用close(也尝试了stop)方法。到那时,消费者已经处理了大约1000条信息。但是,他们没有完成当前的工作,也没有从队列中收到更多消息,而是花了3分钟来处理另外大约10.000条消息,最后才停止并结束应用程序(connection.close()是一个阻塞调用)

我怀疑这可能是由于客户端存在某种缓冲区,我一直在寻找限制缓冲区的方法,并在工厂配置中将这四个属性设置为尽可能严格:

<producer-window-size>1</producer-window-size>
<consumer-window-size>0</consumer-window-size>
<consumer-max-rate>1</consumer-max-rate>
<producer-max-rate>1</producer-max-rate>
1
0
1.
1.

我知道我不一定需要所有的这些,但我只是想尝试一切。我知道这些正在注册,因为一旦将用户窗口大小设置为零,我遇到的另一个问题,即消息的使用顺序,已经得到解决。

我们已更改代码,根据以下提交中断上游通信:

HORNETQ-1379&-当服务器无法通过OIO交付时强制客户端退出

提交可能会让您了解更改的内容:

基本上,我们现在强制关闭网络连接,当连接关闭时,什么会在您关闭连接时中断与任何站立消费者的通信


我不认为这个提交是在2.2分支上完成的

非常感谢你的回复。我已经安装了hornetq-2.4.0.Final(使用独立的、非集群的)并在我的客户端应用程序中将hornetq核心客户端和hornetq jms客户端的版本更改为2.4.4.Final(以及netty 3.2.9.Final、jnp客户端4.2.2.GA)。不幸的是,问题仍然存在,[QueueConnection].close()调用会阻塞几分钟。当我将使用者的数量限制为10时,它会更快地完成,大约在10秒钟内,每个线程从请求关闭连接的那一刻起接收3-4条消息。它实际上相当于200个消费者的时间,因为10秒x20是200个消费者完成任务所需的3分钟。有没有可能减少这个?2.4.0没有我们需要的更改。。。你能从git构建2.4.x并试用吗?如果仍然存在,我们将需要一个TestCase,我已经尝试了2.5.0-SNAPSHOT,但问题仍然存在。这个版本应该包括修复程序吗?我还认为,问题可能不是运行200个线程需要时间来“传播”关闭请求。虽然我尝试在具有最大优先级的线程中调用close方法,但它没有改变任何内容。您是否尊重会话/线程边界?我需要看一个测试用例来看看你在做什么。。如果有效的话。。如果是虫子的话。。或者只是一种误用行为。