使用 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