2013-06-03 75 views
1

我正在嘗試在我的應用程序中使用ActiveMQ 5.8.0消息組,並且在閱讀文檔後沒有得到我期望的結果。如何使用ActiveMQ中的消息組

我爲特定隊列啓動兩個(或更多)使用者,然後將消息發送到隊列。在生產者的createMessage方法中,我正在使用:

message.setStringProperty("JMSXGroupID", "foo"); 

設置GroupID。請注意,出於測試目的,我對「foo」進行了硬編碼。它最終將會是生產者設置的字符串。

因爲我的消息中只設置了一個消息組,所以我期望看到一個消費者會變爲活動狀態並佔用隊列中的所有消息,而另一個消費者會保持靜止狀態。

取而代之,我看到第一個消費者處理的第一條消息,然後在第一個消費者完成後第二個消費者處理第二條消息。消費者繼續以這種方式輪流使用,直到消費完所有消息。

這是預期的行爲,還是我需要在ActiveMQ或我的生產者或消費者上做一些額外的配置,以確保每個GroupID都與單個使用者相關聯。

回答

2

AMQ消息組只是保證單個消費者一次只能在給定組(「foo」等)上活動......它不會將該組綁定到特定的消費者,因此AMQ的內部消費者負載平衡可能只是消費者之間的交替。

不管,這不應該是當你使用的是帶有多個消費者的JMSXGroupID動態值,問題等

+0

我知道你的答案是很老了,還是,你可以詳細說明爲什麼你認爲它不依賴於給定的消費者?我將http://activemq.apache.org/message-groups.html解釋爲完全相反,因爲它聲明消費者「將接收具有相同JMSXGroupID值的所有更多消息,直到:」某人通過發送關閉消息組JMSXGroupSeq爲負值的消息「。 –

+0

......我忘記了第二個條件,即「消費者關閉」,但對我來說,這很明顯,只要擁有的消費者仍然存在,一個羣體內的消息不會在消費者之間反彈。 –

相關問題