我正在将amqp库用于php作为Rabbitmq客户端,我们希望拒绝来自名为“测试”的队列的消息
为了不丢失此消息,我们定义了名为“ test.deadletter”的死信队列。
如果我们直接(通过Web界面)将消息添加到“测试”队列中,并通过amqplib客户端的basic.reject方法拒绝该消息,则该消息将正确地移至死信队列。
但是,如果我们使用某种交换(带有路由密钥)将消息放入测试队列,然后我们尝试拒绝此消息,则消息只会丢失。它不再位于测试队列中,也不再位于test.deadletter队列中。
消息是相同的,并且basic.reject方法的两个必需参数在两次尝试中都相同。只是事实是没有区别,该消息一次来自交换而另一次来自某些直接插入。
这是错误还是预期的行为?我想念的是什么?
最诚挚的问候
答案 0 :(得分:0)
Dead letter exchanges (DLXs) are normal exchanges。如果您的消息无法路由(例如,由于路由键),或者如果死信交换没有绑定任何队列,RabbitMQ将删除该消息。
我怀疑test.deadletter
没有使用与发布消息相同的路由密钥绑定到死信交换。
注意: RabbitMQ团队监视rabbitmq-users
mailing list,并且有时仅在StackOverflow上回答问题。