rabbitmq - RabbitMQ 独占队列与独占消费者有什么区别?
问题描述
无法解决和之间的差异exclusive queue
,exclusive consumer
并且想知道我是否正确。
假设我有一个queue
,consumer1
和consumer2
。
我的理解是:
排他队列
如果queue
是exclusive queue
并且被创建consumer1
,只能consumer1
访问队列,当consumer1
宕机时,queue
被删除。听起来消息随后丢失了。
独家消费者
如果queue
不是独占的并且是由 创建的consumer1
,那么两者consumer1
和consumer2
都可以从中读取。如果consumer1
下降,consumer2
可以从中断的地方继续。如果consumer1
是exclusive consumer
并且首先开始订阅,则consumer2
无法访问queue
,而它被锁定consumer1
。
exclusive queue
对我来说听起来像是一个奇怪的用例,而exclusive consumer
听起来像是“一次只能从队列中处理一个消费者”的正确解决方案。
解决方案
我认为它们之间的区别在于,对于exclusive
队列,它只能被consumers
用于声明队列的同一连接上的那些消耗。当此连接关闭或断开时,exclusive
队列会自动关闭rabbitmq
。它的用例是您通常希望在exclusive
(私人)消费者退出或断开连接时销毁队列。
而exclusive
普通消费者的用例queue
略有不同。私人消费者可能已经消失或断开连接,但另一个消费者可以成为下一个exclusive
消费者的继任者,并且它可能不必与rabbitmq
用于声明queue
.
本质上,这两个用例都是关于允许exclusive
访问队列,但后者不那么严格。