我正在努力实现这一目标。有很多相互矛盾的答案要知道它是否可能。
根据之前的链接,这是不可能的。但是在这个论坛的另一个问题中,有人说他们可以在这里和在这里的评论部分。
那么,是否可以做实时队列 => 死信队列 => 实时队列
还是我需要使用特定版本的 RabbitMq 来实现这一点?
我能够做到:活队列 => 死信队列和死信队列 => 活队列。
如果死信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
.