天天看點

MOM系列文章之 - Final Consistency 讨論

       消息中間件的最終一緻性如何保證?架構上面,主要考慮以下幾個方面:

       1。事務同步;

       2。消息緩存or持久化;

       3。定時鐘輪詢

       事務同步很好了解。我的消息總不能在事務送出前發出去吧?為此,架構設計中我們通常這麼幹:

        消息緩存or持久化,這裡有兩個進行實際處理的時機。其一,事務送出後,緩存或者資料庫中持有一份事件,這個也比較契合eda架構;第二個持久化的時機可以放到消息發送失敗的時候。通常情況下,需要綜合考慮deliverymode,auto_acknowledge等參數的設定。

        定時鐘輪詢,這一步也是mom高可用性的一大保障。一旦我們緩存或者持久化消息後,當消息消費端出現問題,異或其它原因導緻消費阻塞,我們就可以通過定時鐘輪詢+重推機制確定消息的最終一緻性。