ActiveMQ的訊息重試機制
阿新 • • 發佈:2019-02-09
處理失敗時的訊息重發機制
1. 處理失敗 指的是MessageListener的onMessage方法裡丟擲RuntimeException。
4. 如果失敗2次,consumer重啟,則broker再推過來的訊息裡,redeliveryCounter=2,本地只能再重試4次即會進入DLQ。
1. 處理失敗 指的是MessageListener的onMessage方法裡丟擲RuntimeException。
2. Message頭裡有兩個相關欄位:Redelivered預設為false,redeliveryCounter預設為0。
3. 訊息先由broker傳送給consumer,consumer呼叫listener,如果處理失敗,本地redeliveryCounter++,給broker一個特定應答,broker端的message裡redeliveryCounter++,延遲一點時間繼續呼叫,預設1s。超過6次,則給broker另一個特定應答,broker就直接傳送訊息到DLQ。
5. 重試的特定應答傳送到broker,broker即會在記憶體將訊息的redelivered設定為true,redeliveryCounter++,但是這兩個欄位都沒有持久化,即沒有修改儲存中的訊息記錄。所以broker重啟時這兩個欄位會被重置為預設值。
細化待續...