RabbitMQ独占和自动删除之间的区别?

RabbitMQ独占和自动删除之间的区别?,rabbitmq,Rabbitmq,第19页的“RabbitMQ in Action”一书对独占和自动删除进行了以下描述: 独占-设置为true时,队列将变为私有队列,并且只能 被你的应用程序消费。这在需要限制队列时非常有用 只有一个消费者 自动删除-当最后一次 消费者退订。如果需要仅由一个用户使用的临时队列 消费者,将自动删除与独占相结合。当消费者 断开连接时,队列将被删除 但就我所见,当使用独占时,自动删除是多余的。只需要独占。拉比似乎说情况就是这样 …一旦我们断开消费者的连接,队列应该被删除。有 专用标志: 在该教程中没有提

第19页的“RabbitMQ in Action”一书对独占和自动删除进行了以下描述:

独占-设置为true时,队列将变为私有队列,并且只能 被你的应用程序消费。这在需要限制队列时非常有用 只有一个消费者

自动删除-当最后一次 消费者退订。如果需要仅由一个用户使用的临时队列 消费者,将自动删除与独占相结合。当消费者 断开连接时,队列将被删除

但就我所见,当使用独占时,自动删除是多余的。只需要独占。拉比似乎说情况就是这样

…一旦我们断开消费者的连接,队列应该被删除。有 专用标志:


在该教程中没有提到自动删除,并且
sudo rabbitmqctl list_绑定
似乎表明队列实际上是在接收者离开后被删除的。

好吧,当消费者断开连接时,
exclusive
队列确实会自动删除(参见下面粘贴的内容)。但是,在某些情况下,您希望队列是非独占的,但仍然是自动删除的(例如,如果我想添加另一个消费者)

独家

独占队列只能由当前连接访问,并在该连接关闭时删除。不允许其他连接被动声明独占队列

自动删除

如果已设置,则在所有使用者完成使用后删除队列 信息技术可以显式取消最后一个使用者,也可以因为 它的频道是封闭的。如果队列中从来没有消费者,那么 不会被删除。应用程序可以显式删除自动删除 正常情况下使用Delete方法的队列

就个人而言,我更喜欢使用这两个参数,而不是选择RabbitMQ参数,如果消费者断开连接,然后立即(或短时间)重新连接,这会更好;在这种情况下,消息不会丢失。但是,这当然取决于您的应用程序和需求。

与此相反,我的测试表明,在将“自动删除”切换到“独占”设置为“真”时,行为会有所不同

如果auto delete设置为false,则队列确实与连接绑定,并且在连接终止时将消失

如果“自动删除”设置为true,则在取消最后一个使用者后将删除队列


连接和使用者之间存在差异。您可以连接,但不使用给定队列。如果您需要将队列的生命周期绑定到您的连接,而不是您是否正在积极使用它,请将auto delete与exclusive=true一起设置为false。

但是链接上会显示“当连接关闭时将被删除”(并且不提消费者)。是,这对于
exclusive
,是正确的-问题涉及了
exclusive
auto delete
之间的区别-希望我能够说明,当您可能想同时使用两者时,有一个重要的区别和有效的场景。这与文档完全一致。我认为问题在于,问题涉及到一些第三方来源,而这些来源并不准确。如果那本书只是从文档中引用会更好,但它选择了释义,而且做得很差,因此产生了这个问题。
result = channel.queue_declare(exclusive=True)