1. 程式人生 > >ActiveMQ的訊息重試機制

ActiveMQ的訊息重試機制

處理失敗時的訊息重發機制
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。

4. 如果失敗2次,consumer重啟,則broker再推過來的訊息裡,redeliveryCounter=2,本地只能再重試4次即會進入DLQ。

5. 重試的特定應答傳送到broker,broker即會在記憶體將訊息的redelivered設定為true,redeliveryCounter++,但是這兩個欄位都沒有持久化,即沒有修改儲存中的訊息記錄。所以broker重啟時這兩個欄位會被重置為預設值。

細化待續...