使用RabbitMQ Admin(v3),我尝试创建一个队列,将死信函发送到默认交换机,路由键“MyErrorRoutingKey”上绑定了一个错误队列。 所以在管理界面中,我把“死信交换”留空了。
我只是想知道在尝试创建队列时是否正常以下消息:
406 PRECONDITION_FAILED - 无效的arg'x-dead-letter-routing-key'for 在vhost'/'中队列'MyQueue':routing_key_but_no_dlx_defined
似乎可以将死信消息路由到默认交换,因为在文档中进一步说:
可以形成死信队列的循环。例如, 当队列将消息写入默认消息时,可能会发生这种情况 交换而不指定死信路由密钥。消息 这样的周期(即两次到达同一队列的消息)将是 丢弃。
那么我应该如何将消息路由到默认交换机?与上面描述的“循环无用的死信”不同,我希望能够指定路由密钥,以便我的消息不会丢失。
答案 0 :(得分:4)
听起来像routing_key_but_no_dlx_defined,如果你没有定义一个死信交换,你不应该定义一个死信 - 路由密钥,这也是有道理的。
我不确定你要对默认交换做什么,但是也有一个名字所以也许你也可以设置死信交换...
关于你对文档的最后引用,这意味着如果你使用死信交换设置一个循环,即:
QUEUE-A > DEAD-LETTER-QUEUE > QUEUE-A
...如果由于超时而离开DEAD-LETTER-QUEUE,RabbitMQ会在消息返回QUEUE-A时删除该消息。 如果这样的延迟重试是您想要的,您将不得不手动将消息排队到DEAD-LETTER-QUEUE当前,但有迹象表明RabbitMQ可能会让您稍后有这样的周期(http://lists.rabbitmq.com/pipermail/rabbitmq-discuss/2013-April/026489.html)。 / p>
答案 1 :(得分:2)
老问题,但似乎没有人回答,所以我会试一试。
我在使用网络用户界面遇到完全相同的错误时遇到了麻烦,但我可以通过手动设置“x-dead-letter-exchange”和“x-dead-letter-routing-key”来绕过它自定义参数,而不是使用提供的字段。