“RabbitMQ in Action”一书第 19 页给出了独占和自动删除的以下描述:
自动删除 - 当最后一个消费者取消订阅时,队列会自动删除。如果您需要一个仅由一个消费者使用的临时队列,请将自动删除与独占结合起来。当消费者断开连接时,队列将被删除。
然后,在https://www.rabbitmq.com/ttl.html中,给出了expeire描述:
过期策略控制队列在被自动删除之前可以不使用的时间。未使用意味着队列没有消费者,队列最近没有被重新声明(重新声明更新租约),并且 basic.get 在至少过期期限内没有被调用
自动删除的解释:当所有消费者都使用完队列时,队列将被删除。最后一个消费者可以显式取消,也可以因为其通道关闭而取消。如果队列中没有消费者,则不会将其删除。应用程序可以使用Delete 方法显式删除自动删除队列。
Expires的解释:可以通过将 x-expires 参数设置为queue.declare 或设置过期策略来设置给定队列的过期时间。这控制队列在被自动删除之前可以不使用的时间。未使用意味着队列没有消费者,队列最近没有被重新声明(重新声明更新租约),并且 basic.get 在至少过期期限内没有被调用。例如,这可以用于 RPC 样式的回复队列,其中可以创建许多可能永远不会被耗尽的队列。
我认为使用过期而不是自动删除会更好,因为如果发生某些事情并且订阅者短时间内宕机,那么消息不会丢失,这是使用过期的一大优势,这简单地解释了两者之间的区别。
| 归档时间: |
|
| 查看次数: |
6934 次 |
| 最近记录: |