RabbitMQ,死信交换 -> 无法将消息路由到默认交换?

Seb*_*ber 7 amqp rabbitmq dead-letter

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

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

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

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

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

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

kip*_*ple 7

老问题,但似乎没有人回答,所以我试一试。

我在使用 Web UI 时遇到了完全相同的错误,但我能够通过将“x-dead-letter-exchange”和“x-dead-letter-routing-key”手动设置为自定义参数来解决它使用提供的字段。

在此处输入图片说明


Mag*_*gge 4

在我看来,routing_key_but_no_dlx_define 表示,如果您没有定义死信交换,则不应定义死信路由密钥,这也是有道理的。

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

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

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

...如果由于超时而离开死信队列,RabbitMQ 将在消息返回到 QUEUE-A 时丢弃该消息。如果您想要这样的延迟重试,您目前必须手动将消息排队到死信队列,但有迹象表明 RabbitMQ 可能会让您稍后进行这样的循环(http://lists.rabbitmq. com/pipermail/rabbitmq-discuss/2013-April/026489.html)。