這似乎是一個相當普遍的問題,但我無法找到答案。假設我有一個發佈/訂閱基礎架構,並且解決方案的一個組件必須在接收有關該主題的消息時採取行動(每個消息只應執行一次操作)。組件的高可用性以及用於負載平衡的主動 - 主動語義也很重要。有關高可用性的酒吧/子結構的建議
使用P2P消息傳遞模式,通過運行消費者的多個實例監聽同一隊列,可以很容易地實現此目的。但是,對於pub/sub,消費者的每個實例都將收到自己的消息副本,因此可能會多次執行相同的操作。
我想要的方法是讓分離的組件以主動 - 被動模式運行,並通過將消息轉發到隊列(它可能是另一個代理甚至像Redis之類的東西)將pub/sub轉換爲P2P。翻譯者的兩個實例之間會有一個心跳消息,一旦主動實例因任何原因斷開連接,該消息將允許被動實例訂閱主題。
另一種選擇是在所有活動實例之間共享存儲,並且一旦一個實例開始處理消息,它將在存儲器中指示這一點,因此其他實例只會從處理中刪除消息。我擔心這會導致很多爭用問題,從而將主動 - 主動配置的好處歸結爲無。
我正在尋找其他方法的建議,或者對我列出的方法進行改進。
這有幫助嗎? http://knolleary.net/2012/04/11/queuing-with-mqtt/ – ralight
這確實有幫助,我認爲這篇文章類似於第一種方法。但是,它並不能解決單個主題訂戶的高可用性部分,因此仍然需要考慮。 –