1

我正在使用用于 php 的 amqp 库作为 rabbitmq 客户端,我们想拒绝来自名为“test”的队列中的消息

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

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

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

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

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

此致

4

1 回答 1

1

死信交换 (DLX) 是正常的交换。如果您的消息无法路由(例如,由于路由键)或者没有绑定到死信交换的队列,RabbitMQ 将丢弃该消息。

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


注意: RabbitMQ 团队会监控rabbitmq-users 邮件列表,有时只会在 StackOverflow 上回答问题。

于 2019-04-25T17:37:23.023 回答