[rabbitmq-discuss] Exclusive queues and mirroring

Matthias Radestock matthias at rabbitmq.com
Sat Mar 8 22:12:28 GMT 2014


Jon,

On 08/03/14 00:21, Jonathan Holland wrote:
> We have a scenario where we want to use queue mirroring in a cluster,
> but have the queues auto-delete when the last consumer disconnects.
>
> When we have a mirrored policy enabled, and the queue is not exclusive
> or autodelete, then I see it properly mirroring to a slave node.
>
> When we enable exclusive and autodelete, the queue no longer mirrors.

What do you mean by "no longer mirrors"?

You are aware of the semantics of exclusive and auto-delete, right?

https://www.rabbitmq.com/amqp-0-9-1-reference.html#queue.declare.exclusive

"Exclusive queues are deleted when that connection [which created the 
queue] closes"

https://www.rabbitmq.com/amqp-0-9-1-reference.html#queue.declare.auto-delete

"the queue is deleted when all consumers have finished using it. The 
last consumer can be cancelled either explicitly or because its channel 
is closed"

Both exclusive and auto-delete are entirely orthogonal to mirroring, 
though obviously when a node is failing, then all the connections to 
that node vanish, which in turn triggers the deletion of exclusive 
queues created by those connections, and  deletion of auto-delete queues 
where all consumers were connected to that node.

So usage of these flags in conjunction with mirroring is rarely a 
sensible combination since the same event that triggers fail-over to a 
mirrored queue's slave, i.e. the failure of a node, would usually also 
trigger the deletion of the queue.

Queues with a TTL (http://www.rabbitmq.com/ttl.html#queue-ttl) are an 
alternative to auto-delete queues. They can tolerate network and client 
failures, and, when mirrored, node failures.


Regards,

Matthias.


More information about the rabbitmq-discuss mailing list