RocketMq對於消費者對於訊息的如何處理的
1:如果設定了自動提交
返回:
ConsumeOrderlyStatus.COMMIT, ConsumeOrderlyStatus.ROLLBACK, ConsumeOrderlyStatus.SUCCESS , 返回者三種狀態都是會提交offset,
但是返回ConsumeOrderlyStatus.SUSPEND_CURRENT_QUEUE_A_MOMENT 會校驗是否重試。達到重試次數(達到設定的重試次數會投遞到重試佇列,見下文)還是失敗也會提交offest;
2:如果是非自動提交:
只有返回commit才會提交offest,返回其他的狀態都不會commit offest
返回:SUSPEND_CURRENT_QUEUE_A_MOMENT 需要重試的時候是不會繼續消費,達到重試次數也不會提交offest。
判斷方法主要獲取最大的重試次數和當前訊息的重試次數對比,如果達到了最大的重試次數就是執行 sendMessageBack 方法。這個方法將訊息傳送到重試佇列中,稍後進行重試(還是失敗及時投遞到死信DLQ佇列中)
傳送失敗,訊息會繼續重試。
如果當前重試次數小於最大重試次數,則繼續阻塞重試。
這個是獲取最大重試次數的方法,當沒有設定重試次數 (預設 -1) 就重試Integer的最大值。否則以設定為準。
下面這段邏輯是達到重試次數後投遞到重試佇列的邏輯。
重試佇列的topic:%RETRY%+{消費者組的名稱}
順序訊息消費種對於順序強要求的,需要消費失敗阻塞消費的,可以設定非自動提交,然後捕獲異常,只有消費成功才進行commit;