RabbitMQ高级特性——TTL(队列消息过期时间)(2020年7月28日)

  • TTL 全称 Time To Live(存活时间/过期时间)。
  • 当消息到达存活时间后,还没有被消费,会被自动清除。
  • RabbitMQ可以对消息设置过期时间,也可以对整个队列(Queue)设置过期时间。
  • 在这里插入图片描述

因为是针对队列消息的时间设置,肯定是在生产者端进行操作。

1、web管理界面设置

1:新建队列时,设置队列里的消息的过期时间在这里插入图片描述

效果:消息发布之后,到了过期时间队列的消息将消失。

2、代码设置(以整合spring的rabbitmq为例)

2.1、统一过期

统一过期需要在声明队列的时候设置
1、在配置文件声明队列时,加上x-message-ttl参数,如下:
在这里插入图片描述
这样在发送消息到队列之后,消息在ttl到了就自动在队列中去除。

2.2 单独过期

单独过期需要在发送消息的时候设置
1、在配置文件设置队列、交换机绑定略;
2、发送消息时候设置过期时间:

    public void send(){
        MessagePostProcessor messagePostProcessor = new MessagePostProcessor() {
            @Override
            public Message postProcessMessage(Message message) throws AmqpException {
                message.getMessageProperties().setExpiration("5000");
                return message;
            }
        };
        for (int i = 0; i <10 ; i++) {
            //发送消息
            rabbitTemplate.convertAndSend("test_exchange_ttl", "ttl.xx", "ttl消息-----------",messagePostProcessor);

        }
    }

给单独的消息设置过期时间是通过实现匿名类MessagePostProcessor的一个方法实现的。message.getMessageProperties().setExpiration("5000");传入的参数类型是字符串,但是内部会转换成毫秒值。

PS:独列消息的单独过期是当消息处于队列的顶端再开始倒计时过期,如果不在顶端那么消息是不会过期的,所以一般设置TTL都是针对整个队列。

总结:

  • 设置队列过期时间使用参数:x-message-ttl,单位:ms(毫秒),会对整个队列消息统一过期。
  • 设置消息过期时间使用参数:expiration。单位:ms(毫秒),当该消息在队列头部时(消费时),会单独判断这一消息是否过期。
  • 如果两者都进行了设置,以时间短的为准。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值