如果使用者未确认消息,ActiveMQ将停止向队列使用者发送消息



我们有一个用例,其中我们只创建一个使用者来处理队列中的消息。消息处理器在确认之前累积一定数量的消息。以异步方式接收消息,并使用事务处理会话。邮件的大小非常小。

在一定数量的消息之后,Active MQ停止向唯一使用者发送进一步的消息,并等待确认。我们已经尝试过类似于consumer.prefetchSizeconsumer.maximumPendingMessageLimit的解决方案;但什么都不起作用。我们在一个只有一个订阅者的持久主题中尝试了类似的用例,它运行良好。

有人遇到过类似的activemq问题/行为吗?我们尝试了许多在不同论坛上提到的东西,但都没有帮助。

Activemq版本:Activemq 5.6.0
队列配置:持久队列
使用者:异步并使用事务会话作为确认模式

如有任何帮助或建议,我们将不胜感激。谢谢

我尝试了很多不同的配置,通过设置不同的activemq属性(如预取策略、最大页面大小等)来解决这个问题,但都没有真正的帮助。通过引用@Jake的评论,我通过JConsole。这是一个非常方便的工具来监视和管理您的activemq。这里有几篇你可能觉得有用的文章
1.监控activemq
2.使用JConsole连接activemqJMX

通过监视队列属性,我发现memoryLimit属性的赋值非常低(只有1mb)。增加属性的值解决了我的问题。JMS在不等待确认的情况下开始发送消息。

出于测试目的,我在conf/activemq.xml配置文件中更改了memoryLimit的值。