最新の安定バージョンについては、spring-cloud-stream 4.2.1 を使用してください。 |
RabbitMQ バインダーで再試行する
バインダー内で再試行が有効になっている場合、リスナーコンテナースレッドは、構成されているバックオフ期間の間中断されます。これは、単一のコンシューマーで厳密なオーダーが必要な場合に重要になる可能性があります。ただし、他のユースケースでは、他のメッセージがそのスレッドで処理されるのを防ぎます。バインダーの再試行を使用する代わりに、デッドレターキュー(DLQ)に存続する時間のあるデッドレタリングと、DLQ 自体のデッドレター構成を設定することもできます。ここで説明するプロパティの詳細については、"RabbitMQ バインダーのプロパティ" を参照してください。次の設定例を使用して、この機能を有効にできます。
autoBindDlq
をtrue
に設定します。バインダーは DLQ を作成します。オプションで、deadLetterQueueName
で名前を指定できます。dlqTtl
を、再配信の間に待機するバックオフ時間に設定します。dlqDeadLetterExchange
をデフォルトの交換に設定します。デフォルトのdeadLetterRoutingKey
はキュー名(destination.group
)であるため、DLQ からの期限切れのメッセージは元のキューにルーティングされます。次の例に示すように、デフォルトの交換に設定するには、値を指定せずにプロパティを設定します。
メッセージを強制的にデッドレターにするには、AmqpRejectAndDontRequeueException
をスローするか、requeueRejected
を false
(デフォルト)に設定して例外をスローします。
ループは終わりなく続きます。これは一時的な問題には問題ありませんが、何度か試行した後はあきらめたい場合があります。幸い、RabbitMQ は x-death
ヘッダーを提供します。これにより、発生したサイクル数を判別できます。
諦めた後にメッセージを確認するには、ImmediateAcknowledgeAmqpException
をスローします。