一架梯子,一头程序猿,仰望星空!
RabbitMQ教程 > 内容正文

RabbitMQ 消息过期时间(TTL)


RabbitMQ的消息过期时间(TTL)下面两种方式进行设置

  1. 通过队列属性设置,队列中所有消息都有相同的过期时间。
  2. 对每条消息单独设置过期时间,每条消息的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),
            })

推荐教程