RabbitMQ的消息过期时间(TTL)下面两种方式进行设置
- 通过队列属性设置,队列中所有消息都有相同的过期时间。
- 对每条消息单独设置过期时间,每条消息的TTL可以不同。如果两种方法一起使用,则消息的TTL以两者之间较小的那个数值为准。
提示:对于第一种设置队列属性的方法,一旦消息过期,就会从队列中抹去,而在第二种方法中,即使消息过期,也不会马上从队列中删除,因为每条消息是否过期是在消息投递到消费者之前才进行检查。
下面使用Golang进行演示如何设置,其他开发语言类似。
设置队列TTL
通过队列属性(x-message-ttl)设置消息过期时间。
// 队列属性
props := make(map[string]interface{})
// 消息过期时间为60秒
props["x-message-ttl"] = 60000
q, err := ch.QueueDeclare(
"tizi365.ttl.hello", // 队列名
true, // 是否持久化队列
false,
false,
false,
props, // 设置队列属性
)
设置消息TTL
通过消息属性设置消息过期时间
err = ch.Publish(
"tizi365", // 交换机名
"", // 路由参数
false,
false,
amqp.Publishing{
Expiration: "30000", // 过期时间为30秒
ContentType: "text/plain",
Body: []byte(body),
})