说明
在之前的一篇博文《springboot学习(十三):RabbitMQ的使用 实现消息延迟消费》中,我使用RabbitMQ来达到失败消息的延迟重试的目的。其中就使用了消息的TTL和 死信交换机( Dead Letter Exchanges)。本篇博文我将继续翻译学习官方文档中对消息和队列的TTL的相关详解,通过本文我们将了解消息的TTL和队列的TTL,在设置时的差别等等内容。
正文
概述
RabbitMQ允许你为消息和队列设置有效期TTL(time to live),可以在队列声明时使用可选参数设置,也可以使用policies命令设置。官方推荐使用后者进行设置。
消息的TTL可以应用于一个队列,一组队列又或者针对每个消息进行设置。
基于队列的消息TTL
为一个队列设置消息的TTL,可以通过命令指定policy的message-ttl参数值,或者在队列声明时,指定相同名称的参数值。
当队列中的消息存留时间超过了配置的生存时间(TTL),则称该消息已死亡。注意,同一个消息被路由到不同的队列将拥有不同的过期时间,又或者永远不会过期。这取决于消息所存在的队列。一个队列中的死亡消息不会影响到其他队列中与之相同消息的生命周期。
服务器能保证在使用basic.deliver(推模式)或basic.get-ok(拉模式)的方式获取消息时,死亡消息将不会被传递给消费者。而且,服务器将尝试在消息过期时或之后将其删除。
不管是声明队列时设置的T