使用 RabbitMQ Binder 進行重試
當在 binder 中啟用重試時,監聽器容器執行緒會因為任何已設定的回退期間而暫停。當需要使用單一消費者進行嚴格排序時,這可能很重要。然而,對於其他用例,它會阻止該執行緒上處理其他訊息。使用 binder 重試的替代方案是設定死信佇列 (DLQ) 的死信處理,以及 DLQ 本身也設定死信組態。請參閱「RabbitMQ Binder 屬性」,以取得關於此處討論的屬性的更多資訊。您可以使用以下範例組態來啟用此功能
-
將
autoBindDlq
設定為true
。binder 會建立一個 DLQ。您可以選擇性地在deadLetterQueueName
中指定名稱。 -
將
dlqTtl
設定為您想要在重新傳遞之間等待的回退時間。 -
將
dlqDeadLetterExchange
設定為預設交換器。來自 DLQ 的過期訊息會路由到原始佇列,因為預設的deadLetterRoutingKey
是佇列名稱 (destination.group
)。透過不設定值來設定屬性,即可達成設定為預設交換器,如下一個範例所示。
若要強制將訊息設為死信,請拋出 AmqpRejectAndDontRequeueException
,或將 requeueRejected
設定為 false
(預設值) 並拋出任何例外狀況。
迴圈會無限期地繼續,對於暫時性問題來說這很好,但您可能希望在嘗試幾次後放棄。幸運的是,RabbitMQ 提供了 x-death
標頭,可讓您判斷發生了多少個週期。
若要在放棄後確認訊息,請拋出 ImmediateAcknowledgeAmqpException
。