我无法解决exclusive queue
和exclusive consumer
之间的区别,并且想知道我是否正确。
假设我有一个queue
,consumer1
和consumer2
。
我的理解是:
专有队列
如果queue
是exclusive queue
并由consumer1
创建,则只有consumer1
可以访问队列,而当consumer1
出现故障时,{{1} }被删除。听起来好像消息丢失了。
独家消费者
如果queue
不是由queue
创建的,则consumer1
和consumer1
都可以读取。如果consumer2
掉线,consumer1
可以从停下来的地方捡起。如果consumer2
是consumer1
并先启动订阅,则exclusive consumer
在被consumer2
锁定的情况下无法访问queue
。
consumer1
对我来说听起来像是一个怪异的用例,而exclusive queue
听起来像是“一次只能有1个使用者从队列中处理”的正确解决方案。
答案 0 :(得分:0)
我认为它们之间的区别在于,对于exclusive
队列,只能由consumers
使用,它们在用于声明队列的同一连接上。关闭或断开连接时,exclusive
将自动关闭rabbitmq
队列。它的用例是您通常希望在exclusive
(专用)使用者退出或断开连接时销毁队列。
exclusive
消费者在普通queue
上的使用情况略有不同。私人消费者可能已经离开或断开连接,但另一个消费者可以成为下一个exclusive
消费者的继任者,并且可能不必与用于声明{{ 1}}。
基本上,这两个用例都是关于允许rabbitmq
访问队列的,但后者的严格程度较低。