2013-07-31 135 views
0

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

在某些消息并等待确认后,主动MQ停止发送更多消息给唯一消费者。我们已尝试解决方案,如consumer.prefetchSizeconsumer.maximumPendingMessageLimit;但没有任何工作。 我们尝试了类似的用例,只有一个订户的持久主题,它工作正常。

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

ActiveMQ的版本:的ActiveMQ 5.6.0
队列配置:耐久队列
消费者:异步并使用事务会话如确认模式

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

+0

请显示打开'QueueSession'的代码。在'QueueSession'上调用'commit'的代码。从第一次读取开始直到'commit'需要多长时间? – Beryllium

+0

我忘记了:会话是如何关闭的(在正常情况下和例外情况下) – Beryllium

+0

由于它太大/复杂,粘贴只是代码片段将会很难将整个代码覆盖在此处在理解我的问题上有所不同。当我创建队列的使用者时,我会在收到停止请求时打开会话并关闭会话。 –

回答

1

我尝试了很多不同的配置来解决这个问题,通过设置不同的activemq属性,如预取策略,maxpagesize等,但没有一个真正帮助。通过参考@Jake's评论我了解了使用JMX通过 JConsole监控activemq。这是一个非常方便的工具来监视和管理你的activemq。 这里有一些您可能会觉得有用的文章。
1. Monitoring activemq
2. Connecting activemq JMX using JConsole

通过监控队列属性我想通了的memoryLimit属性有分配给它的(只是1MB)非常低的值。增加属性的值解决了我的问题。 JMS开始发送消息而无需等待确认。

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

相关问题