[rabbitmq-discuss] Change in semantics of {exchange, queue}.{unbind, delete}

Matthias Radestock matthias at rabbitmq.com
Sun Jan 12 09:56:25 GMT 2014


Alan,

On 12/01/14 01:17, Alan Antonuk wrote:
> It appears that the semantics of exchange.delete, exchange.unbind,
> queue.delete, and queue.unbind when the entity doesn't exist have
> changed: they used to throw a channel exception, now they do not.
> [...]
> I'm also kind of curious as to why this behavior was changed (which I
> would assume was for perf reasons).

The new behaviour is more useful and semantically consistent. AMQP 
generally has an idempotent assertion semantics, i.e. commands indicate 
what should be rather than what should happen. This is so that clients 
can operate independently on the shared space of resources, with each 
client simply asserting what it requires.

So declaring an exchange/queue/binding which already exists is perfectly 
fine. And deleting an exchange/queue/binding which doesn't exist should 
therefore be fine too.

You can get the old behaviour by prefixing the delete with a passive 
declare.

Regards,

Matthias.


More information about the rabbitmq-discuss mailing list