兔子消息队列,死信交换机 -> 无法将消息路由到默认交换机?

7
使用RabbitMQ Admin(v3),我试图创建一个队列,该队列将把死信消息发送到默认交换机,并绑定一个错误队列的路由键“MyErrorRoutingKey”。因此,在管理界面中,我将“死信交换”留空。
当尝试创建队列时,是否出现以下消息是正常的:
406 PRECONDITION_FAILED-无效参数'x-dead-letter-routing-key'用于队列'MyQueue'在虚拟主机'/'中:routing_key_but_no_dlx_defined
似乎可以将死信消息路由到默认交换机,因为在文档的进一步部分中提到:
可以形成死信队列的循环。例如,当队列未指定死信路由键并将消息传递给默认交换机时,就会发生这种情况。在此类循环中(即到达同一队列两次的消息)将丢弃消息。
那么我该如何将消息路由到默认交换机?与上述的“循环无用的死信”不同,我希望能够指定路由键,以便我的消息不会丢失。
2个回答

9

这个问题很久以前就有人问了,但貌似没有人回答,我来试试。

我也遇到了使用web UI时出现完全相同的错误,但我成功规避了这个问题,方法是手动将"x-dead-letter-exchange"和"x-dead-letter-routing-key"设置为自定义参数,而不是使用提供的字段。

enter image description here


4
听起来像是 routing_key_but_no_dlx_defined 说如果你没有定义死信交换机,就不应该定义死信路由键,这也有一定道理。
我不确定你在尝试使用默认交换机做什么,但它也有一个名称,所以也许你可以设置死信交换机...
关于你从文档中引用的最后一句话,它意味着如果你使用死信交换机设置了一个循环,即:
QUEUE-A > DEAD-LETTER-QUEUE > QUEUE-A
...当消息因超时离开 DEAD-LETTER-QUEUE 并回到 QUEUE-A 时,RabbitMQ 将丢弃该消息。 如果这样的延迟重试是你想要的,目前你必须手动将消息排队到 DEAD-LETTER-QUEUE,但有迹象表明 RabbitMQ 可能会在以后允许你拥有这样的循环 (http://lists.rabbitmq.com/pipermail/rabbitmq-discuss/2013-April/026489.html)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接