3

假設在下圖中,中間消息隊列失敗。發件人仍然可以使用其他消息隊列發送消息。在分佈式消息隊列中實現容錯

但是如果消息隊列在收到消息後死亡會發生什麼。發送者如何知道消息是發送給接收者還是不知道是否重新發送到不同的消息隊列?

如果接收方在消息隊列傳遞消息後死亡,會發生什麼情況?發送者如何知道接收者是否已經滿足其預期的請求?

enter image description here

回答

6

作爲一個起點,你需要閱讀http://en.wikipedia.org/wiki/Two_Generals%27_Problem

這是計算機科學中一個非常着名且非常普遍的問題。從技術上講,它被認爲是「解決」,因爲我們知道答案;然而,短篇小說是:你所要求的(嚴格來說)是不可能的。如果信心是< 1.0,那麼可以設計的協議可以讓您達到信息已傳遞(或未傳遞)的任何信心水平。

實際上,使用兩階段和三階段分佈式事務協議的變體以及各種重發和再同步回退。具體取決於實施。

通常的選擇是允許重複的可能性,並要求接收方做出適當的響應。這是TCP做出的選擇,如果你考慮這個問題,就試圖找到同樣問題的合理答案。

+0

如果上下文是WebSockets讓客戶端瀏覽器每隔10秒輪詢一次,看是否有推送的數據無法生成它,那麼建議這樣做嗎? – user782220 2013-02-20 05:37:38

+1

這將是基於發送數據量的工程判斷;傳輸延遲;操作回放的可用性;兩端都有交易保證;等等 – Recurse 2013-02-20 08:08:46