RocketMq如何順序消費的消息offest
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;