先說結論
不建議在mq當中使用消息的投遞順序來保證消息的順序一致性
反思爲什麼需要保留消息的順序性
日常思維中,順序大部分情況會和時間關聯起來,即時間的先後表示事件的順序關係。
消息隊列中的若干消息如果是對同一個數據進行操作,這些操作具有前後的關係,必須要按前後的順序執行,否則就會造成數據異常。
其實保證是最終結果的一致性
什麼情況下會出現消息錯亂
同一個消息,有多個消費者,消費時長不同,導致第一個消息未處理完成,第二個已經處理完成了
如圖
不同的中間件出現亂序的原因不同
簡單的解決方案
RocketMQ 中 使用順序消息
可以考慮用狀態機,對於一些狀態順序類的 可以通過狀態機進行判斷,判斷失敗的先延時+nack拒絕消費,等待其他消息
- 關注公衆號 [龗孖] 或搜索公衆號[lingmaW] , 獲得更多新幹貨!!!
- 版權聲明: 本博客所有文章除特別聲明外,均採用 反996許可證版本1.0 許可協議。轉載請註明出處!