我正在努力实现this。有很多相互矛盾的答案要知道它是否可能。
根据之前的链接,这是不可能的。但是在这个论坛的另一个问题上,有人评论说他们能够here和评论部分here。
那么,是否可以进行实时队列=> dead-letter-queue =>实时队列
或者我是否需要使用特定版本的RabbitMq来实现这一目标?
我能够做到:live queue =>死信队列 和dead-letter-queue =>现场排队。
答案 0 :(得分:2)
如果来自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
。