我已經看到了幾個關於這個問題,但沒有答案,我發現令人滿意。這個問題,特別是zeromq pattern: pub/sub with guaranteed delivery是類似的,儘管我願意使用任何其他的zeromq機制來實現相同的效果。如何避免丟棄消息zeromq pub sub
我的問題是,有沒有辦法在風扇將郵件發送像出版商訂戶模式在ZeroMQ與保證該信息將被傳遞?看起來好像零拷貝的經銷商可以做到這一點,但它會比pub-sub更混亂。有更好的選擇嗎?除了編寫更多的代碼之外,這樣做還有什麼缺點?
原因需要這樣的:
我寫代碼來分析數據,從儀表到來。連接到儀器的模塊需要能夠將數據廣播到其他模塊供他們分析。反過來,他們需要將他們的分析數據廣播到輸出模塊。
乍一看發佈 - 訂閱與ZeroMQ似乎完美的人選,但如果任何用戶放緩,命中高水位標記的消息會被丟棄。在這個系統的情況下,由於事件的連續性,僅僅在一小部分模塊上丟棄消息是不可接受的。所有模塊都需要分析輸出的事件纔有意義。但是,如果沒有模塊收到事件消息,那就沒問題。出於這個原因,如果其中一個分析模塊達到高水位標記,阻止發佈者(儀器模塊)就可以了。
我想另一種選擇是應對事後錯過的消息,但只是浪費上,將在稍後丟棄的事件處理時間。
編輯: 我猜想進一步,我目前預計發送消息=消息傳遞,因爲我正在使用inproc和線程之間進行通信。但是,如果我要通過tcp發送消息,則即使ZeroMQ不會故意丟棄消息,該消息也可能會丟失。這是否意味着我可能需要處理丟棄的郵件,即使我使用阻止發送?使用inproc是否有任何有關郵件傳遞的保證?
+1與ACID類比 – SteveLove