RabbitMQ 过期和自动删除之间的区别?

Adr*_*ria 6 amqp rabbitmq

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

自动删除 - 当最后一个消费者取消订阅时,队列会自动删除。如果您需要一个仅由一个消费者使用的临时队列,请将自动删除与独占结合起来。当消费者断​​开连接时,队列将被删除。

然后,在https://www.rabbitmq.com/ttl.html中,给出了expeire描述:

过期策略控制队列在被自动删除之前可以不使用的时间。未使用意味着队列没有消费者,队列最近没有被重新声明(重新声明更新租约),并且 basic.get 在至少过期期限内没有被调用

bas*_*isk 7

自动删除的解释:当所有消费者都使用完队列时,队列将被删除。最后一个消费者可以显式取消,也可以因为其通道关闭而取消。如果队列中没有消费者,则不会将其删除。应用程序可以使用Delete 方法显式删除自动删除队列。

Expires的解释:可以通过将 x-expires 参数设置为queue.declare 或设置过期策略来设置给定队列的过期时间。这控制队列在被自动删除之前可以不使用的时间。未使用意味着队列没有消费者,队列最近没有被重新声明(重新声明更新租约),并且 basic.get 在至少过期期限内没有被调用。例如,这可以用于 RPC 样式的回复队列,其中可以创建许多可能永远不会被耗尽的队列。

我认为使用过期而不是自动删除会更好,因为如果发生某些事情并且订阅者短时间内宕机,那么消息不会丢失,这是使用过期的一大优势,这简单地解释了两者之间的区别。