在大量大批量生產環境中有消息總線和組播的經驗,並且與幾位有經驗的網絡工程師討論過這些問題,我可以說你應該避免組播如鼠疫,除非你正在廣播非常多的節點(數百)。
如果你打算使用多播,你必須明白它是一個不可靠的協議。消息可能會丟失,可能會重複,等等。您需要花費大量時間在多播之上獲得可靠性協議(重試,重複檢測,重新發送),以使其有用。關於組播指揮機器人坦克的軍隊測試有一個很好的軼事,我試圖找到一個參考...基本上當你發送「右轉90度,右轉90度,火」到坦克線其中一些人只收到1個右轉信息,其他人收到3個,這是一個混亂的祕方。
根據您需要共享的信息種類,有幾種選擇。
如果他們共享配置信息,請看Zookeeper之類的東西。它的可靠性,重量輕,使用簡單。共享狀態的最新值始終可用並且保持不變。使用消息總線,您仍然需要重新發送協議,以防止模塊由於關閉而丟失最後的配置消息。
對於消息總線,它們可能很複雜。但是,我不會把ZeroMQ放在這個類別中。它可以模擬消息總線,但它更像是點到點機制。我沒有在生產中使用它,但我用它做的研究和原型非常有利。
另一種選擇可能是Oracle Coherence,GridGain,GigaSpaces等分佈式數據網格。再次,這是安裝和維護的另一個應用程序,因此您的複雜性不斷上升,但數據網格有很多用途。
另一個MQ選項是HornetMQ。我沒有使用它(我們在內部使用兩個商用MQ,包括Sonic和MQ Series),但我看到了一些有利的比較。
D-Bus似乎針對單臺機器上的通信進行了優化,常見問題解答建議您在其他地方查看是否正在進行點對點,集羣或其他類似的事情。警告:我從來沒有使用過D-Bus,所以我基本上反思了我剛纔閱讀的信息。
你有什麼消息速率,大小,持久性和可靠性要求? –
@ScottA。大約有30個模塊需要共享信息。消息速率並不是非常高。它主要是需要傳遞給其他模塊的狀態信息,例如當狀態發生變化時,或者某個模塊請求狀態變量的值時。在發佈/訂閱方案中,可靠性不是一個大問題,而是在請求/回覆方案中。 –
在共享狀態下保存了多少信息?對於Zookeeper來說,用例是高讀取,低寫入和相當少量的數據。這不是一個消息系統,但可以作爲一個濫用。 –