带有RabbitMq的Spring amqp:掉落死信队列后,消息不会回到活动队列

时间:2014-12-24 17:25:31

标签: rabbitmq spring-amqp spring-rabbit

我正在努力实现this。有很多相互矛盾的答案要知道它是否可能。

根据之前的链接,这是不可能的。但是在这个论坛的另一个问题上,有人评论说他们能够here和评论部分here

那么,是否可以进行实时队列=> dead-letter-queue =>实时队列

或者我是否需要使用特定版本的RabbitMq来实现这一目标?

我能够做到:live queue =>死信队列 和dead-letter-queue =>现场排队。

1 个答案:

答案 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