先說結論
不建議在mq當中使用消息的投遞順序來保證消息的順序一緻性
反思為什麼需要保留消息的順序性
日常思維中,順序大部分情況會和時間關聯起來,即時間的先後表示事件的順序關系。
消息隊列中的若幹消息如果是對同一個資料進行操作,這些操作具有前後的關系,必須要按前後的順序執行,否則就會造成資料異常。
其實保證是最終結果的一緻性
什麼情況下會出現消息錯亂
同一個消息,有多個消費者,消費時長不同,導緻第一個消息未處理完成,第二個已經處理完成了
如圖

不同的中間件出現亂序的原因不同
簡單的解決方案
RocketMQ 中 使用順序消息
可以考慮用狀态機,對于一些狀态順序類的 可以通過狀态機進行判斷,判斷失敗的先延時+nack拒絕消費,等待其他消息
- 關注公衆号 [龗孖] 或搜尋公衆号[lingmaW] , 獲得更多新幹貨!!!