RabbitMQ(八)RabbitMQ的过期时间TTL

RabbitMQ(八)RabbitMQ的过期时间TTL

  • Time To Live:生存时间、还能活多久,单位毫秒
  • 在这个周期内,消息可以被消费者正常消费,超过这个时间,则自动删除(其实是被称为dead message并投入到死信队列,无法消费该消息)
  • RabbitMQ可以对消息和队列设置TTL
    • 通过队列设置,队列中所有消息都有相同的过期时间
    • 对消息单独设置,每条消息的TTL可以不同(更颗粒化)

设置队列TTL

spring-rabbitmq-producer.xml

<!--重新配置队列-->
<!--
    auto-declare="true":自动声明
-->
<rabbit:queue name="test_spring_queue_ttl" auto-declare="true">
    <rabbit:queue-arguments>
        <!--
            x-message-ttl:过期时间后删除消息
        -->
        <entry key="x-message-ttl" value-type="long" value="5000"></entry>
    </rabbit:queue-arguments>
</rabbit:queue>

5秒之后,消息自动删除

设置消息TTL

设置某条消息的ttl,只需要在创建发送消息时指定即可

<!--配置队列-->
<rabbit:queue name="test_spring_queue_ttl_2"></rabbit:queue>
public class Sender2 {

    public static void main(String[] args) {
        //获取spring的配置文件
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("spring/spring-rabbitmq-producer.xml");
        //与容器中获取RabbitMQ模板类
        RabbitTemplate rabbitTemplate = context.getBean(RabbitTemplate.class);
        //创建消息的配置对象
        MessageProperties properties = new MessageProperties();
        //设置过期时间 3 秒
        properties.setExpiration("3000");
        //创建消息
        Message message = new Message("测试过期时间".getBytes(),properties);
        /**
         * String routingKey: 指定路由键
         * Object object: 发送的数据
         */
        rabbitTemplate.convertAndSend("msg.user", message);
        System.out.println("消息已发送!");
        context.close();
    }

}

如果同时设置了queue和message的TTL值,则二者中较小的才会起作用

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值