1、概述
TTL,Time to Live的简称,过期时间。
2、设置TTL
目前两种方法可以设置消息的TTL。第一种方法就是通过队列属性设置,队列中所有当消息都有相同的过期时间。第二种方法是对消息本身进行单独设置,每条消息的TTL可以不同。如果两种方法一起使用,则消息的TTL以两者之间较小的那个数值为准。消息队列中的生存时间一旦超过设置的TTL值,就会变成“死信”。
(1)设置消息的TTL
针对每条消息设置TTL的方法是在basic.publish方法中加入expiration的属性参数,单位为ms.
①通过policy的方式设置TTL
如果不设置TTL,则表示此消息不会过期;如果将TTL设置为0,则表示此时可以直接投递到消费者,否则该消息会被立即丢弃,这个特性可以部分替代RabbitMQ 3.0版本之前的immediate参数。
②通过HTTP API接口配置
对于第一种设置的TTL属性的方法,一旦消息过期,就会从队列中抹去,而在第二种TTL方法中,即使消息过期,也不会马上从队列中抹去,因为每条消息是否过期是在即将投递到消费者之前判定的。
(2)设置队列的TTL
通过队列属性设置消息TTL的方法是在queue.declare方法中加入x-message-ttl参数,单位为ms.
设置队列里的TTL可以应用与类似RPC方式的回复队列在RPC中,许多队列会被创建出来,但是确实未被使用的。
RabbitMQ会确保在过期时间到达后将队列删除,但是不保障删除的动作有多及时。在RabbitMQ重启后,持久化的队列的过期时间会被重新计算。