RabbitMQ独占队列与独占使用者之间的区别是什么?

RabbitMQ独占队列与独占使用者之间的区别是什么?,rabbitmq,Rabbitmq,在分析独占队列和独占消费者之间的差异时遇到困难,我想知道我的回答是否正确 假设我有一个队列,消费者1,和消费者2 我的理解是: 独占队列 如果queue是exclusive queue并且是由consumer1创建的,则只有consumer1可以访问队列,并且当consumer1下降时,queue被删除。这听起来像是信息丢失了 独家消费者 如果队列不是独占的,并且是由消费者1创建的,则消费者1和消费者2都可以从中读取。如果consumer1出现故障,consumer2可以从故障处恢复。如果con

在分析
独占队列
独占消费者
之间的差异时遇到困难,我想知道我的回答是否正确

假设我有一个
队列
消费者1
,和
消费者2

我的理解是:

独占队列

如果
queue
exclusive queue
并且是由
consumer1
创建的,则只有
consumer1
可以访问队列,并且当
consumer1
下降时,
queue
被删除。这听起来像是信息丢失了

独家消费者

如果
队列
不是独占的,并且是由
消费者1
创建的,则
消费者1
消费者2
都可以从中读取。如果
consumer1
出现故障,
consumer2
可以从故障处恢复。如果
consumer1
exclusive consumer1
并首先启动订阅,则
consumer2
无法访问
队列,而它被
consumer1
锁定


exclusive queue
对我来说似乎是一个奇怪的用例,而
exclusive consumer
似乎是“一次只能处理队列中的一个消费者”的合适解决方案.

我认为它们之间的区别在于,对于
独占
队列,它只能由
使用者使用,这些使用者位于用于声明队列的同一连接上。当此连接关闭或断开时,
exclusive
队列将由
rabbitmq
自动关闭。它的用例是,您通常希望在
独占
(专用)使用者退出或断开连接时销毁队列

而正常
队列
上的
独占
消费者的用例略有不同。私有使用者可能已离开或断开连接,但另一使用者可以是下一个
独占
使用者的继任者,并且它可能不必与用于声明
队列的
rabbitmq
连接在同一
连接上


本质上,这两个用例都是关于允许对队列进行
独占的
访问,但后者的要求不那么严格

在这个极好的答案上再扩展一点,如果存在一个普通的消息队列,并且消费者a决定以独占方式从该队列中消费,则允许该队列,并将所有消息传递给a。之后,消费者B将不允许侦听该队列。如果A中断、失去连接或取消(连接)通道,则应用程序负责重新启动A或创建另一个使用者。但是,包含消息的队列仍保持在那里。