【问题标题】:Spring amqp with RabbitMq: Message is not circled back to live queue after falling off dead letter queue带有 RabbitMq 的 Spring amqp:消息在从死信队列中掉出后未循环回活动队列
【发布时间】:2014-12-24 17:25:31
【问题描述】:
我正在努力实现this。有很多相互矛盾的答案要知道它是否可能。
根据之前的链接,这是不可能的。但是在这个论坛的另一个问题中,有人评论说他们可以here和评论部分here。
那么,是否可以做实时队列 => 死信队列 => 实时队列
或者我是否需要使用特定版本的 RabbitMq 来实现这一点?
我能做到:活队列 => 死信队列
和死信队列 => 实时队列。
【问题讨论】:
标签:
rabbitmq
spring-amqp
spring-rabbit
【解决方案1】:
如果来自alive 的死信到期 - 根据文档...
可以形成死信队列的循环。例如,当队列死信消息发送到默认交换时,可能会发生这种情况而没有指定死信路由键。在这样的周期中的消息(即两次到达同一队列的消息)如果整个周期是由于消息到期而被丢弃。
(我的重点)。
我刚刚进行了一个测试,其中来自alive 的死信是由于拒绝而导致的,它工作得很好;几个周期后,x-death 标头看起来像这样...
reason: rejected
queue: alive
time: 1419448981
exchange: req
routing-keys: alive
reason: expired
queue: dead
time: 1419448981
exchange: dlx
routing-keys: alive
reason: rejected
queue: alive
time: 1419448976
exchange: req
routing-keys: alive
reason: expired
queue: dead
time: 1419448976
exchange: dlx
routing-keys: alive
...
为了测试这一点,我强制 Spring AMQP 侦听器失败并将defaultRequeueRejected 设置为false。