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或创建另一个使用者。但是,包含消息的队列仍保持在那里。