TTL也可以在队列上设置,而不仅仅是队列内容。此功能可以与auto-delete队列属性一起使用。
在队列上设置TTL(逾期)通常只对瞬态(非持久)经典队列有意义。流不支持逾期。
队列只有在不使用时才会在一段时间后逾期(如果队列有在线消费者,则表现队列正被使用)。
可以通过将x-expires参数设置为queue.restable,或通过设置expires策略来为给定的队列设置逾期时间。这可控制队列在被自动删除之前可以使用多长时间。未使用意味着队列没有消费者,队列最近没有重新声明(重新声明会续订租约),并且至少在到期期间没有basic.get调用。
服务器包管,如果队列至少在逾期期间未使用,则将被删除。但无法包管如何迅速移除逾期后队列。
x-expires参数或expires策略值描述了以毫秒为单位的逾期时间。逾期时间必须是正整数(与消息TTL差别,它不能为0)。因此,值1000表现将删除1秒内未使用的队列。
使用策略界说队列TTL(Define Queue TTL for Queues Using a Policy)
以下策略使所有队列在上次使用后30分钟后逾期:
rabbitmqctlrabbitmqctl set_policy expiry ".*" '{"expires":1800000}' --apply-to queuesrabbitmqctl (Windows)rabbitmqctl.bat set_policy expiry ".*" "{""expires"":1800000}" --apply-to queues声明队列时使用x-arguments为队列界说队列TTL(Define Queue TTL for Queues Using x-arguments During Declaration)
此Java示例创建了一个队列,该队列在未使用30分钟后逾期。
Map<String, Object> args = new HashMap<String, Object>();