我使用amqp库为php作为rabbitmq客户端,我们想拒绝一个消息从队列所谓的“测试”
为了避免消息丢失,我们定义了一个名为“test.deadletter”的死信队列。
如果我们直接将一条消息添加到队列“test”(通过web接口),并通过amqplib客户端的基本.reject方法拒绝它,则消息会正确地移动到deadletter队列。
但是,如果我们使用一些交换(带有路由键)将消息放入测试队列,然后我们试图拒绝它,消息就会丢失。它不再在测试队列中,但也不在测试.deadletter队列中。
消息是相同的,基本.reject方法所需的两个参数在两次尝试中是相同的。没有区别,只是事实上,消息一次来自交换,另一次来自一些直接插入。
这是一种bug还是预期的行为?我错过了什么?
问候
1条答案
按热度按时间wgx48brx1#
Dead letter exchanges (DLXs) are normal exchanges .如果你的消息是不可路由的(例如,由于路由键),或者如果没有队列绑定到死信交换,RabbitMQ将删除消息。
我怀疑
test.deadletter
没有使用与发布消息相同的路由密钥绑定到死信交换。