RabbitMQ 中的TTL(Time To Live)是指消息在队列中的最大存活时间。当消息在队列中的存活时间超过设定的 TTL 阈值时:
如果队列已配置死信队列(Dead Letter Exchange),消息会被自动路由至该队列。
如果队列未配置死信队列,消息将被系统自动丢弃。
支持通过 Queue 属性配置和消息单独设置两种方式配置消息 TTL。
通过 Queue 属性设置:Queue 中的所有消息具有相同的 TTL。
对消息单独设置:每条消息可以配置不同的 TTL,通过客户端配置。
约束与限制
若同时设置了 Queue TTL 和消息 TTL 时,以较小的 TTL 为准。
配置 Queue TTL
在创建 Queue 时,在常用参数中配置消息 TTL。具体步骤请参考创建 Queue。 配置 Message TTL
以下为一个 Java 客户端示例,通过在channel.basicPublish方法中加入expiration参数设置 TTL,单位为 ms。
byte[] messageBodyBytes = "Hello, world!".getBytes();
AMQP.BasicProperties properties = new AMQP.BasicProperties.Builder()
.expiration("80000")
.build();
channel.basicPublish("test-exchange", "routing-key", properties, messageBodyBytes);