2016-04-08 14 views
1

この2つのリンクに続くメッセージキューの処理を遅らせる予定ですlink1link2。したがって、リンクに示唆されているように。私はx-dead-letter-exchangex-dead-letter-routing-key引数を持つ元のキューを宣言しました。メッセージがコンシューマによって処理されなかったか、またはttlが発生したか、キューの長さが超過したときに、いわゆるdead-letter-queueにメッセージを公開しました。 dead-letter-queueでは、類似の引数がttlパラメータと共に設定されています。 ttlを超過した後にメッセージを元のキューに再パブリッシュするとします。しかし問題は、すべてのメッセージを削除していることです。デッドレターメッセージがttl後に元のキューに再キューイングされない

さらに、ここにキャッチがあります。失敗したメッセージを元のキューからデッドレターキューに明示的に発行するとします。次に、ttlの後、メッセージを元のキューに再発行します。それはなぜそうであり、どうすればそれを機能させるのですか?デッドレターキューは、メッセージをドロップする代わりに元のキューに再発行するようにします。私はRabbitMQ 3.0.0を使用しています。キューがそのキュー内のメッセージがデッドレター交換に送信されることを意味TTL設定(DLXを持っている場合はFYI、私は、ルーティングキー

答えて

2

とともにdirectタイプの両方の交流を作成している

TTLが期限切れになった後にそのキューに関連付けられています。キューにDLXが割り当てられていない場合、メッセージはビットバケットに入ります。

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

Dead-lettering dead-lettered messages in RabbitMQ

うまくいけば、それはあなたのために有用です。

+0

提案したことを行うのではなく、 'x-dead-letter-exchange'と' 'x-dead-letter-routing-key'の助けを借りずに、失敗したメッセージを元のキューからデッドレターキューに明示的に公開することもできます。また、dead-letter-queueは、ttlの後に元のキューにメッセージを再発行します。だから、私はメッセージを明示的に、そして組み込みの機能を介して公開することの違いを理解できません。 – Naresh

+0

説明する方法は、単一のキューがある場合にのみ機能します。私のリンクでは、その方法はN個のキューをデッドレターで1つの再試行キューにするために機能します。 – jhilden

+0

とにかく、メッセージを明示的に公開したり、組み込み機能を使用したりすることに違いがあるのはなぜですか。任意のアイデア – Naresh

0

元の交換がx.notificationであり、キューAとキューAにバインドされているとします。デッドレター交換ネームはdlx.notificationです。待ち行列q.Aで待ちたい時間間隔をdlx.notificationとして設定します。 dlx.notificationから有効期限切れのメッセージをルーティングキー "A"を使用してdlq.Aにルーティングする別のキューdlq.Aを作成します。私はあなたの目標を達成するためにあなたがする必要があることをすべて思います。

関連する問題