RocketMQ及分散式訊息系統的原理以及重要問題解讀
阿新 • • 發佈:2019-01-05
看到一篇好文章,記錄一下:http://www.jianshu.com/p/453c6e7ff81c
先總結下他的解決方案:
把訊息順序放到 業務層去實現,同時解決訊息重複的問題(因為其最終目標是要叢集的高容錯性和高吞吐量,因為為了保證順序,mq server必定要與每一個消費端進行多次溝通,一個訊息消費完,才傳送另一個訊息,這樣並行效能註定低下)解決訊息重複2 個方案,1. 訊息冪等,2 訊息日誌(記錄訊息應用狀態)
本文把訊息事務(分散式訊息一般要考慮 訊息順序和訊息重複的處理)、分散式事務,說的很透徹,值得一讀。
執行流程:第一階段 先Prepare(拿到訊息地址),第二階段 保證本地事務成功,再發送訊息,第三階段 根據Prepare訊息地址,修改訊息狀態,最後確認訊息已傳送。如果確認訊息確認失敗,“訊息叢集掃描Prepare訊息地址,這時候發現了Prepared訊息,它會向訊息傳送者確認,如果本地事務成功(扣款成功),訊息傳送失敗,是回滾還是繼續傳送確認訊息呢? RocketMQ會根據傳送端設定的策略來決定是回滾還是繼續傳送確認訊息。這樣就保證了訊息傳送與本地事務同時成功或同時失敗。”