為保障網路波動或服務端異常情境下的互動可靠性,Simple Message Queue (formerly MNS)用戶端按照發送端與消費端分層設計可靠性策略。
發送端重試機制
異常分類與重試觸發
異常分類:分類捕獲用戶端異常(
MNS ClientException,例如網路逾時、限流錯誤碼等 )或伺服器異常(ServerException),區分可重試錯誤(例如錯誤碼為5xx或網路抖動等)與不可重試錯誤(例如資源不存在QueueNotExist)。用戶端按需重試:按照業務情境,可在業務代碼中按需構建重試代碼進行重發訊息。
退避策略
建議採用指數退避(如初始1秒,上限60秒)疊加隨機抖動策略,避免叢集級重試風暴。
消費端重試機制
服務端自動重試
消費失敗時(例如訊息未顯式ACK或消費逾時),Simple Message Queue (formerly MNS)會根據隊列的訊息可見度逾時時間(Visibility Timeout)在用戶端拉取時重新投遞訊息。
消費端等冪設計
商務邏輯需天然等冪(例如通過資料庫唯一鍵約束去重),或通過訊息唯一標識
MessageId+ 業務狀態機器判斷訊息是否已處理。
異常處理
捕獲消費邏輯異常後,不主動發送確認(ACK),等待Simple Message Queue (formerly MNS)重投,直到訊息消費成功時調用
DeleteMessage介面刪除訊息。
相關文檔
Java範例程式碼,請參見消費訊息樣本。