RabbitMQ 在死信队列上针对来自交换的消息的奇怪行为

RabbitMQ weird behavior on dead letter queue for messages from exchanges

我正在使用 php 的 amqp 库作为 rabbitmq 客户端,我们想拒绝来自名为 "test"

的队列的消息

为了不丢失此消息,我们定义了名为 "test.deadletter" 的死信队列。

如果我们直接将消息添加到队列 "test"(通过 Web 界面)并通过 amqplib 客户端的 basic.reject 方法拒绝它,则消息会正确地移动到死信队列。

但是,如果我们使用某种交换(带有路由键)将消息放入测试队列,然后我们尝试拒绝它,消息就会丢失。它不再在测试队列中,但也不在 test.deadletter 队列中。

消息相同,basic.reject 方法所需的两个参数在两次尝试中都相同。没有区别,只是消息一次来自交换,另一次来自某个直接插入。

这是一种错误还是预期的行为?我缺少什么?

此致

Dead letter exchanges (DLXs) are normal exchanges。如果您的消息无法路由(例如,由于路由键)或者如果没有队列绑定到死信交换,RabbitMQ 将丢弃该消息。

我怀疑 test.deadletter 未使用与用于发布消息的路由密钥相同的路由密钥绑定到死信交换。


注意: RabbitMQ 团队监控 rabbitmq-users mailing list 并且有时只在 Whosebug 上回答问题。