<div dir="ltr">This is my setup:<br><br>I have an exchange named "live" with a queue named "livequeue" bound to it by routing key "msg", and another exchange named "deferred" with a queue named "deferredqueue" bound to it, also with routing key "msg".<br>"livequeue" has set the exchange "deferred" as dead-letter exchange and "msg" as dead-letter routing key, and "deferredqueue" has set a message TTL of 5 minutes, "live" as dead-letter exchange and "msg" as dead-letter routing key.<br>Messages are initially published to exchange "live" with routing key "msg" by a publisher, so they end up in queue "livequeue". Consumers will read from "livequeue" and either process and ack the message, or if they can't process it right away, reject it with requeue set to false. On rejection, the message will move to "deferredqueue" through the dead-letter exchange of "livequeue".<br>Everything works as expected up to this point. However, when the message TTL of "deferredqueue" is up, I expected the message to reappear again in "livequeue" via the dead-letter exchange of "deferredqueue", but the message is dropped instead.<br>If, however, I ack the message in "livequeue" and publish it to "deferredqueue" using basic_publish, instead of rejecting it, the message <i>does</i> reappear in "livequeue"&nbsp; after the TTL is over, as expected.<br><br>So my question is, is this the normal (intended) behavior, or am I doing something wrong? If this is the normal behavior, is there a way to change it by some exchange/queue/message property, so it will work as I initially planned?<br>This is <i>not</i> a request to change anything in RabbitMQ or AMQP, I just want to know how to handle this kind of thing properly.<br></div>