如何保證消息的冪等性?(如何保證消息不被重復消費?)


消息重復消費,會造成數據混亂,特別是在涉及消費和財務系統里,此問題的解決顯得尤為重要。

以kafka為例

關鍵字:消費端自動提交offset;寫庫或者redis時,先去查一下主鍵、key等是否存在

上圖中,最頂上的文本框丟失的文字:並通知kafka當前最大offset;

最右邊的文本框丟失的文字:數據傳遞過來;

冪等性,通俗來說,就是一個數據或者一個請求給你重復來多次,你得確保對應的數據是不會改變的,不能出錯。

  例如二次消費的時候,自己判斷一下,若已經消費過了,直接扔了,不就保留一條數據了嗎

所以重復消費的解決方案是:

方法1,比如消費者拿數據是要寫庫的,先根據主鍵查一下,有就不插入或者update,否則就插入

方法2,比如消費者是要寫redis,反正每次都是set,天然冪等性

方法3,生產者發送每條數據時,加一個全局的唯一id,類似訂單id,到消費者消費的時候,先拿id去比如redis里查一下,之前若沒消費過,就處理id寫redis,若消費過,就不處理了,保證別重復消費相同 的消息即可;

方法4,或者基於數據庫的唯一鍵來保證重復數據不會重復插入多條,跟方法1類似。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM