消費冪等
更新時間 2023-04-14 18:18:20
最近更新時間: 2023-04-14 18:18:20
分享文章
RocketMQ無法避免消息重復,原因主要有以下幾點:
-
簽收的偏移量是定時(每5秒/次)同步到服務端的。
-
為保證消息不丟失,SDK每次提交的總是隊列未簽收的最小偏移量(比如無序消費,offset為1,2,3,4,5 的消息,1,3,4,5消費并已簽收,2未簽收,簽收時最后提交的偏移量將會是2,如果此時,客戶端重啟,會從2這個位置開始消費)。
-
有網絡交互就不能確保每一次的交互數據都是送達的,為保證數據不丟失就要進行重試,有重試就存在重復的可能。
如果業務對消費重復非常敏感,務必要注意,建議可以采用以下兩種方式處理:
- 業務層面做去重處理,可以根據msgId;如果key字段為業務唯一字段,也可采用key去重。
- 業務邏輯實現消費冪等,即多次處理同一消息,對業務的影響是冪等的。