7

RabbitMQ Admin (v3) を使用して、エラー キューがバインドされているルーティング キー「MyErrorRoutingKey」を使用して、デッド レター メッセージをデフォルトの交換に送信するキューを作成しようとしました。そのため、管理インターフェイスで、「デッド レター交換」を空白のままにしました。

キューを作成しようとすると、次のメッセージが表示されるのが普通なのだろうか。

406 PRECONDITION_FAILED - vhost '/' のキュー 'MyQueue' の無効な引数 'x-dead-letter-routing-key': routing_key_but_no_dlx_defined

ドキュメントでさらに次のように述べられているため、デッドレターメッセージをデフォルトの交換にルーティングすることは可能と思われます。

配信不能キューのサイクルを形成することができます。たとえば、デッドレタールーティングキーを指定せずに、キューがデフォルトの交換にデッドレターメッセージを送信すると、これが発生する可能性があります。このようなサイクルのメッセージ (つまり、同じキューに 2 回到達するメッセージ) は破棄されます。

では、メッセージをデフォルトの交換にルーティングするにはどうすればよいでしょうか? 上記の「循環的な無用な配信不能メール」とは異なり、メッセージが失われないようにルーティング キーを指定できるようにしたいと考えています。

4

2 に答える 2

7

古い質問ですが、誰も答えていないようですので、試してみます。

Web UI を使用してもまったく同じエラーで問題が発生しましたが、"x-dead-letter-exchange" と "x-dead-letter-routing-key" をカスタム引数として手動で設定することで回避できました。提供されたフィールドの使用。

ここに画像の説明を入力

于 2014-04-17T22:32:22.000 に答える
4

routing_key_but_no_dlx_defined は、dead-letter-exchange を定義していない場合は、dead-letter-routing-key を定義すべきではないと言っているように思えますが、これも理にかなっています。

デフォルトの交換で何をしようとしているのか正確にはわかりませんが、それにも名前があるので、dead-letter-exchange を設定することもできます...

ドキュメントからの最後の引用に関しては、dead-letter-exchanged を使用してサイクルをセットアップした場合、つまり次のことを意味します。

QUEUE-A > デッドレター QUEUE > QUEUE-A

...RabbitMQ は、メッセージがタイムアウトのために DEAD-LETTER-QUEUE を離れた場合、QUEUE-A に戻るときにメッセージをドロップします。そのような遅延再試行が必要な場合は、現在、手動でメッセージを DEAD-LETTER-QUEUE にキューイングする必要がありますが、RabbitMQ が後でそのようなサイクルを許可する可能性があることを示しています ( http://lists.rabbitmq. com/pipermail/rabbitmq-discuss/2013-April/026489.html )。

于 2013-10-01T16:08:40.407 に答える