[rabbitmq-discuss] Vanishing of persistent messages on durable, auto-deleting queue with dead-lettering

Matthias Radestock matthias at rabbitmq.com
Sun Jul 1 19:23:14 BST 2012


Ernest,

On 29/06/12 17:27, Ernest Staszuk wrote:
> After disconnecting a client from durable, auto-deleting queue with
> dead-lettering-exchange I would expect passing all messages to dead
> letter exchange and then deleting queue. But surprisingly for me
> queue was deleted and messages just vanished into limbo.

That's the defined behaviour. From 
http://www.rabbitmq.com/extensions.html#dead-letter-exchanges
<quote>
A message is dead-lettered when any of the following events occur:
- The message is rejected (basic.reject or basic.nack) with 
requeue=false; or
- The TTL for the message expires.
</quote>

> Is this behavior desirable? Why?

We deliberately kept the set of operations susceptible to dead-lettering 
small, to avoid unintended consequences. It is possible that actions 
like auto-deletion, queue lease expiry, explicit deletion and purging 
should all trigger the dead-letter mechanism, but I'd like to see 
compelling use cases first before making such a change.

> How should I get around this problem? I thought about declare queue
> as non auto deleting and making own monitoring daemon, which could
> handle cleaning queues without consumers. Is there any simpler way of
> achieve my goal?

Perhaps a combination of queue leases and ttl would work. The former has 
the additional advantage of allowing the system to mask temporary 
consumer and connectivity failures.

Regards,

Matthias.


More information about the rabbitmq-discuss mailing list