2016-09-17 2 views
0

私はRabbitMQからメッセージを受け取るアプリケーションを持っています。メッセージが消費されて何らかの問題が発生した場合私はsetDefaultRequeueRejectedtrueに設定しました。キューに戻ってきています。メッセージを読むのは、Spring AMQPでカウント可能な回数だけです。

私はシナリオを持っています。メッセージがキューに戻った場合は、再び消費され、再びキューに入れられます。これは一種のサイクルを形成しています。

私は再キューに入れられたメッセージを2回だけ消費する必要があります(カウンタの種類を維持する)。その後、それをErrorQueue/DeadLetter Queueにプッシュします。 このようなカウンタを維持するにはどうすればよいですか?

よろしく、

チャンダン

答えて

0

RabbitMQのようなメカニズム、メッセージが再配信されたことを示すだけブールヘッダーを提供しません。

送信者がmessageIdヘッダーを設定する場合は、stateful retry interceptor withを使用できます。フレームワークは、同じメッセージが何回配信されたかを記録します。 RejectAndDontRequeueRecovererを指定すると、再試行が終わった後でメッセージがDLQに送信されます(設定されている場合)。

メッセージIDがない場合は、カスタムMessageKeyGeneratorを使用して、メッセージ自体から状態のキーを生成できます。

+0

ありがとうございました。私は 'MessageKeyGenerator'に関してもっと興味を持っています。サンプルの実装/例を教えてください。これは私には大いに役立ちます:) – Chandan

+0

これは、単純なインタフェース 'Object getKey(Message message)'です。メッセージへの参照を取得し、メッセージを一意に識別する値(ヘッダやメッセージ本文など)を返します。ジェネレータがない場合は、 'messageId'プロパティを使用します。これは、送信者が設定し、一意でなければなりません。メッセージは変換前には未処理です。 –

+0

私はまだ明確さを得ていませんでした。サンプルの実装にリダイレクトしてください。 – Chandan

関連する問題