第19页的"RabbitMQ in Action"一书给出了独占和自动删除的描述:
exclusive - 设置为true时,您的队列将变为私有,并且只能由您的应用程序使用.当您需要将队列限制为仅一个使用者时,这非常有用.
自动删除 - 当最后一个使用者取消订阅时,将自动删除该队列.如果您需要仅由一个使用者使用的临时队列,请将auto-delete与exclusive结合使用.当消费者断开连接时,队列将被删除.
但据我所知,使用独占时,自动删除是多余的.只需要独家.RabbitMQ 教程似乎就是这样说的
...一旦我们断开消费者,就应该删除队列.有一个独家标志:
result = channel.queue_declare(exclusive=True)
Run Code Online (Sandbox Code Playgroud)
在该教程中没有提及自动删除,并且sudo rabbitmqctl list_bindings似乎表明在接收器消失后队列实际上被删除了.
the*_*yer 56
嗯,exclusive当消费者断开连接时,队列将自动删除(请参阅下面粘贴的文档).但是,有些情况下您希望队列是非独占的,但仍然是自动删除(例如,如果我想添加另一个消费者).
独家
专用队列只能由当前连接访问,并在该连接关闭时删除.不允许通过其他连接被动声明独占队列.
自动删除
如果设置,则在所有使用者完成使用后删除队列.可以明确地取消最后一个消费者,也可以关闭其渠道.如果队列中没有消费者,则不会删除它.应用程序可以正常使用Delete方法显式删除自动删除队列.
就个人而言,我更喜欢不使用这些参数,而是选择RabbitMQ 队列到期参数,如果我有消费者断开连接然后立即(或短时间)重新连接,这更好; 在这种情况下,消息不会丢失.但是,当然这一切都取决于您的应用和要求.
kyl*_*yre 12
与Mayer描述的相反,我的测试表明,当self设置为true时,切换自动删除时的行为会有所不同.如果auto-delete设置为false,则队列确实与连接关联,并在连接终止时消失.如果将auto-delete设置为true,则在取消最后一个使用者后将删除该队列.连接和消费者之间存在差异.您可以连接,但不能使用给定的队列.如果您需要将队列的生命周期与您的连接绑定,而不是与您是否主动使用它,请将auto-delete设置为false并与exclusive = true一起使用.
| 归档时间: |
|
| 查看次数: |
32349 次 |
| 最近记录: |