2014-03-19 46 views
0

我正在爲一家我們正在考慮Mule ESB的公司工作。我們需要在羣集配置中設置Mule以獲得Mule高可用性(HA)羣集。多臺服務器與兔子MQ交互

現在,我們需要在電源中斷或磁盤故障的情況下將傳入消息保留到隊列中。據我瞭解,我們可以使用默認的Mule Object Store,它將消息「持久」到共享內存網格。然而,我首先想到的是,如果我們發生停電而使整個集羣失去作用,這就不會有什麼好處。

我們的其他選擇是使用獨立的隊列產品,如RabbitMQ或ActiveMQ。但是,這些與HA集羣完全一致嗎?這些產品中是否有任何機制確保同一信息不會被兩臺機器同時拾取?

考慮這種情況(基於觀察者模式):

  1. 騾接收消息時,把它放在一個隊列,並響應與行 ,其遞送的消息的客戶端。
  2. Mule從隊列中挑選一條消息,並嘗試將其傳遞給訂閱者。
  3. 用戶接受該消息,Mule將其從隊列中移除。

如果HA羣集中的另一個Mule實例嘗試拾取上述2和3之間的消息,會發生什麼情況?是否有一種機制,Mule可以指示從隊列中選擇一條消息進行「嘗試傳送」,但如果傳送失敗,則在傳送失敗時將隊列上的消息更新爲「未傳送」?

回答

1

RabbitMQ和ActiveMQ都會爲您提供我認爲您正在尋找的一次性功能。

兩個平臺都確保隊列中的每個消息都只被一個用戶接收。

在ActiveMQ中,如果發生故障時將消息返回隊列,則可以使用顯式消息確認或JMS事務。這是一個quick overview

在RabbitMQ中,您使用acknowledgements來做到這一點。

另外,您可能需要考慮消息代理的可靠性。 ActiveMQ和RabbitMQ都提供高度可用的代理配置選項。