12 補償機制

1 出現場景

rabbitmq 默認情況下,如果消費者程序出現異常,會自動實現補償機制
消費者出現異常,消息不會消費成功

2 實現原理

2.1 @RabbitListener

@RabbitListener底層,使用Aop進行攔截,如果程序沒有拋出異常,自動提交事務
如果Aop使用異常通知攔截 獲取異常信息的話,自動實現補償機制 ,該消息會緩存到rabbitmq服務器端進行存放,一直重試到不拋異常爲準。

3 自定義重試

spring:
  rabbitmq:
    # 連接地址
    host: 127.0.0.1
    # 端口號
    port: 5672
    # 賬號
    username: guest
    # 密碼
    password: guest
    # 地址
    virtual-host: /
    listener:
      simple:
        retry:
          # 開啓消費者(程序出現異常的情況下會)進行重試
          enabled: true
          # 最大重試次數
          max-attempts: 5
          # 重試間隔次數
          initial-interval: 3000
        # 開啓手動ack
        acknowledge-mode: manual

4 如何選擇重試機制

4.1 需要重試

調用第三方接口,提示連接超時,可以重試

通常來說:無需發佈版本即可解決的異常都可以重試

4.2 無需重試

系統異常,如:空指針,數據轉換異常等

通常來說:需發佈版本即可解決的異常都無需重試

採用日誌記錄+定時任務+人工補償進行解決

5 冪等性

設置消息id,如果消息消費成功,不在消費
如果業務邏輯中存在唯一id,如訂單id,也可用訂單id判重
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章