<div><br></div><div>This is following on from a tweet I made earlier about wishing that RabbitMQ had the ability to push messages to the back of the queue when NAcked.&nbsp;</div><div>Alvaro Videla replied suggesting I ask for the feature here.&nbsp;<br></div><div><br></div><div><br></div><div>Scenario:&nbsp;</div><div>I'm processing messages from a queue with confirmation required.&nbsp;</div><div>The number of messages relative to the consumption rate can be quite high at times. In excess of hundreds of thousands of messages, with consumption rate in the low hundreds per second range.&nbsp;</div><div><br></div><div>Sometimes we have to abandon processing a message for some transient reason (eg: external resource is locked/unavailable), and so we send a NAck. &nbsp;</div><div>At the moment, RabbitMQ will immediately redeliver that message to any of the consumers. If the transient condition is still in place, we can potentially get into a tight loop where we're constantly consuming the same message(s) hundreds of times per second.&nbsp;</div><div><br></div><div>For our scenario, we *can* duplicate the message, send it to the exchange/queue, and Ack the original.&nbsp;</div><div><br></div><div>Something I thought might be a bit nicer is if we could have an option to have RabbitMQ put the message at the back of the queue. Depending on the size of the queue and our processing rate, this might give us an easier way to try other messages in the queue first.&nbsp;</div><div><br></div><div>Another option I was thinking of to enforce more a delay was to see if I could chain together two queues using dead-letter-exchange settings:&nbsp;</div><div><br></div><div>Queue A, no TTL, DLX=Exchange B (with Queue B bound to it).&nbsp;</div><div>Queue B, ttl of (x) seconds, DLX= Exchange A (with Queue A bound to it).&nbsp;</div><div><br></div><div>When we NAck the mesage from Queue A, we set requeue=false.&nbsp;</div><div><br></div><div>I've not seen much discussion so far on whether it's sane to hook up two queues/exchanges in a loop like this.&nbsp;</div><div>Closest I've seen is this:&nbsp;<a href="http://yuserinterface.com/dev/2013/01/08/how-to-schedule-delay-messages-with-rabbitmq-using-a-dead-letter-exchange/">http://yuserinterface.com/dev/2013/01/08/how-to-schedule-delay-messages-with-rabbitmq-using-a-dead-letter-exchange/</a>&nbsp;but that's just using TTL to DLX to delay processing intially, not the whole chain.&nbsp;</div><div><br></div><div>Suggestions or comments?&nbsp;</div><div><br></div><div>Cheers</div><div>Will Hughes.&nbsp;<br></div>