如果消费者未确认消息,ActiveMQ将停止向Queue Consumer发送消息

时间:2013-07-31 13:49:26

标签: java jms activemq

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

Active MQ在一定数量的消息后停止向唯一的消费者发送更多消息并等待确认。我们尝试过像 consumer.prefetchSize consumer.maximumPendingMessageLimit 这样的解决方案;但没有任何工作。 我们尝试了类似的用例和一个只有一个订阅者的持久主题,它工作正常。

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

Activemq版本: ActiveMQ 5.6.0
队列配置:持久队列
消费者:异步并使用交易会话作为确认模式

任何帮助或建议将不胜感激。感谢。

1 个答案:

答案 0 :(得分:1)

我尝试了很多不同的配置来解决这个问题,方法是设置不同的activemq属性,比如prefetch policy,maxpagesize等,但是没有一个真正有用。通过引用@Jake's注释,我了解了使用JMX via监视activemq JConsole。这是监控和管理activemq的一个非常方便的工具。 这里有一些你可能会觉得有用的文章 1. Monitoring activemq
2. Connecting activemq JMX using JConsole

通过监视队列属性,我发现 memoryLimit 属性分配给它的值非常低(仅1mb)。增加属性的值解决了我的问题。 JMS开始发送消息而不等待确认。

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