RabbitMQ exclusive和mandatory的理解
exclusive 排他性
队列的排他性的理解,是针对首次建立连接的,一个连接下面多个通道也是可见的, 对于其他连接是不可见的
设置队列是否排他,为true时,则设置队列排他,改队列对首次声明他的队列连接可见。
排他队列是基于连接可见的,同一个连接的不同信道是可以同时访问同一连接创建的。
RabbitMQ会自动删除这个队列,而不管这个队列是否被声明成持久性的(Durable =true)。 也就是说即使客户端程序将一个排他性的队列声明成了Durable的,只要调用了连接的Close方法或者客户端程序退出了,RabbitMQ都会删除这个队列。注意这里是连接断开的时候,而不是通道断开。这个其实前一点保持一致,只区别连接而非通道。
<!-- 排他性,exclusive=true:首次申明的connection连接下可见; exclusive=false:所有connection连接下都可见 -->
<rabbit:queue id="Producer_MyMessage_Consumer" durable="true" auto-delete="false" exclusive="true" name="Producer_MyMessage_Consumer" />
现象
新建一个队列,配置如上,durable=true exclusive= true
发送了一个消息上去
断开客户端连接 ,发现队列删除了
Mandatory
当mandatory参数设为true时,交换器无法根据自身的类型和路由键找到一个符合条件的队列,那么RabbitMQ会调用Basic.Return命令将消息返回给生产者。当mandatory参数设置为false时,出现上述情形,则消息直接被丢弃。
现象
设置成true时
设置成false