【问题标题】:RabbitMQ difference between expires and auto-delete?RabbitMQ 过期和自动删除的区别?
【发布时间】:2019-09-30 18:50:06
【问题描述】:

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

auto-delete - 队列在最后一次自动删除 消费者退订。如果您需要一个仅供一个人使用的临时队列 消费者,将自动删除与独占结合起来。当消费者 断开连接,队列将被移除。

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

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

【问题讨论】:

标签: rabbitmq amqp


【解决方案1】:

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

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

我认为使用 expires 而不是 auto-delete 会更好,因为如果发生了一些事情并且订阅者在短时间内关闭了,那么 msg 不会丢失,这是使用 expires 的一大优势,并且简单地解释了区别两者之间。

【讨论】:

    【解决方案2】:

    这里简单明了的答案是,独占/自动删除将在第一个消费者断开连接后立即删除队列,而过期 将在一段时间不活动后删除队列,无论消费者过去是否连接过该队列。

    【讨论】:

      猜你喜欢
      • 2013-12-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-22
      • 2022-01-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多