1

これらの 2 つのリンクlink1 link2をたどって、キュー内のメッセージの処理を遅らせることを計画しました。したがって、リンクで提案されているとおりです。x-dead-letter-exchangeおよびx-dead-letter-routing-key引数を使用して元のキューを宣言しました。dead-letter-queueメッセージがコンシューマーによる処理に失敗したか、ttl が発生したか、キューの長さが超過したときに、いわゆるにメッセージを発行しました。現在、dead-letter-queue同様の引数がパラメータとともに設定されていttlます。ttl超過後にメッセージを元のキューに再発行することを想定しています。しかし問題は、すべてのメッセージがドロップされていることです。

さらに、ここで落とし穴があります。失敗したメッセージを元のキューから配信不能キューに明示的に発行する場合。次に、ttl の後、メッセージを元のキューに再発行します。なぜそうなのか、どうすればそれを機能させることができますか。そのため、dead-letter-queue はメッセージをドロップするのではなく、元のキューに再発行します。を使用してRabbitMQ 3.0.0います。

direct参考までに、タイプの交換とルーティング キーの両方を作成しました。

4

2 に答える 2

3

キューに TTL が設定されている場合、そのキュー内のメッセージは、TTL の有効期限が切れた後に、そのキューに関連付けられたデッド レター エクスチェンジ (DLX) に送信されます。キューに DLX が割り当てられていない場合、メッセージはビット バケットに入ります。

再処理されたキューにメッセージを送り返したい場合は、この投稿で説明した設定が必要です。

RabbitMQ での配信不能メッセージの配信不能

うまくいけば、それはあなたにとって役に立ちます。

于 2016-04-08T16:32:24.830 に答える
0

元の交換が x.notification であり、ルーティング キュー A でキュー qA にバインドされているとします。また、デッドレター交換の名前は dlx.notification です。キュー qA で、待機する時間間隔を ttl に設定し、dlx.notification として dead-letter-exchange を設定します。次に、別のキュー dlq.A を作成して、期限切れのメッセージを dlx.notification から dlq.A にルーティング キー "A" でルーティングします。目標を達成するために必要なことはそれだけだと思います。

于 2016-04-11T09:46:22.643 に答える