2013-07-31 166 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的值。

相關問題