7

使用 RabbitMQ Admin (v3),我尝试创建一个将死信消息发送到默认交换器的队列,其中绑定了一个错误队列的路由键“MyErrorRoutingKey”。所以在管理界面,我把“死信交换”留空。

我只是想知道在尝试创建队列时出现以下消息是否正常:

406 PRECONDITION_FAILED - vhost'/'中队列'MyQueue'的无效参数'x-dead-letter-routing-key':routing_key_but_no_dlx_defined

似乎可以将死信消息路由到默认交换,因为在文档中进一步说:

有可能形成死信队列的循环。例如,当队列死信消息发送到默认交换时,可能会发生这种情况,而没有指定死信路由键。这种循环中的消息(即两次到达同一个队列的消息)将被丢弃。

那么我应该如何将消息路由到默认交换?与上面描述的“循环无用死信”不同,我希望能够指定路由键,这样我的消息就不会丢失。

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 说如果你没有定义死信交换,你不应该定义死信路由键,这也是有道理的。

我不确定你想用默认交换做什么,但它也有一个名字,所以也许你也可以设置死信交换......

关于您从文档中引用的最后一句话,这意味着如果您使用死信交换设置了一个循环,即:

队列-A > 死信队列 > 队列-A

...如果由于超时而离开 DEAD-LETTER-QUEUE,RabbitMQ 将在返回到 QUEUE-A 时丢弃该消息。如果你想要这样的延迟重试,你必须手动将消息排队到 DEAD-LETTER-QUEUE,但有迹象表明 RabbitMQ 可能会让你以后有这样的周期(http://lists.rabbitmq. com/pipermail/rabbitmq-discuss/2013-April/026489.html)。

于 2013-10-01T16:08:40.407 回答