RabbitMQ exclusive和mandatory的理解

时间:2024-04-02 19:24:10

                             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 

RabbitMQ exclusive和mandatory的理解

发送了一个消息上去

RabbitMQ exclusive和mandatory的理解

断开客户端连接 ,发现队列删除了

RabbitMQ exclusive和mandatory的理解

Mandatory

当mandatory参数设为true时,交换器无法根据自身的类型和路由键找到一个符合条件的队列,那么RabbitMQ会调用Basic.Return命令将消息返回给生产者。当mandatory参数设置为false时,出现上述情形,则消息直接被丢弃。

现象

设置成true时

RabbitMQ exclusive和mandatory的理解

 

RabbitMQ exclusive和mandatory的理解

 

设置成false

RabbitMQ exclusive和mandatory的理解