使用 RabbitMQ 繫結器進行重試
當繫結器中啟用重試時,偵聽器容器執行緒會在配置的任何退避期內暫停。這在需要嚴格排序的單個消費者場景中可能很重要。但是,對於其他用例,它會阻止在該執行緒上處理其他訊息。除了使用繫結器重試之外,另一種方法是設定死信佇列(DLQ)並配置其存活時間,以及在DLQ本身上進行死信配置。有關此處討論的屬性的更多資訊,請參閱“RabbitMQ 繫結器屬性”。您可以使用以下示例配置來啟用此功能
-
將
autoBindDlq設定為true。繫結器將建立一個 DLQ。您可以選擇在deadLetterQueueName中指定名稱。 -
將
dlqTtl設定為您希望在重新投遞之間等待的退避時間。 -
將
dlqDeadLetterExchange設定為預設交換器。DLQ 中過期的訊息將被路由到原始佇列,因為預設的deadLetterRoutingKey是佇列名稱 (destination.group)。透過不給屬性賦值來實現將其設定為預設交換器,如以下示例所示。
要強制將訊息傳送到死信佇列,可以丟擲 AmqpRejectAndDontRequeueException 異常,或者將 requeueRejected 設定為 false(預設值)並丟擲任何異常。
迴圈將無休止地繼續,這對於瞬時問題來說是好的,但您可能希望在嘗試一定次數後放棄。幸運的是,RabbitMQ 提供了 x-death 頭,它允許您確定已經發生了多少個週期。
在放棄後確認訊息,請丟擲 ImmediateAcknowledgeAmqpException 異常。