当前位置: 首页 > news >正文

RabbitMQ 高级特性之 TTL

1. 简介

TTL 即 Time to Live,在 RabbitMQ 中,可以为消息和队列设置过期时间。

  • 给消息设置过期时间,在指定的时间后就会被 RabbitMQ 清除;
  • 给队列设置过期时间,就相当于给队列中的所有消息设置了一个过期时间,这个消息的过期时间与队列的过期时间是相同的。从消息入队列开始算起,经过这个时间后,就会被删除。

2. 给消息指定过期时间

生产者代码如下:

    @RequestMapping("/ttl")public String ttl1() {String messageInfo = "ttl...";MessagePostProcessor messagePostProcessor = new MessagePostProcessor() {@Overridepublic Message postProcessMessage(Message message) throws AmqpException {message.getMessageProperties().setExpiration("10000"); //该消息的过期时间为 10sreturn message;}};rabbitTemplate.convertAndSend(Constants.TTL_EXCHANGE, Constants.TTL_ROUTINGKEY, messageInfo, );return "消息发送成功";}

运行上述代码,通过观察 RabbitMQ 客户端可以发现,在前 10s 内队列中有消息,超过 10s 后队列中的消息就被删除了。

10s 前:

10 s后:

3. 给队列指定过期时间 

在声明队列时使用 ttl 指定过期时间,代码如下:

    //不指定过期时间@Bean("ttlQueue1")public Queue ttlQueue1() {return QueueBuilder.durable(Constants.TTL_QUEUE1).build();}//指定过期时间@Bean("ttlQueue2")public Queue ttlQueue2() {return QueueBuilder.durable(Constants.TTL_QUEUE2).ttl(15000).build(); //设置过期时间为 15s}

生产者代码如下:

    @RequestMapping("/ttl")public String ttl2() {for (int i = 0; i < 10; i++) {String messageInfo = "ttl... " + i;rabbitTemplate.convertAndSend(Constants.TTL_EXCHANGE, Constants.TTL_ROUTINGKEY, messageInfo);}return "消息发送成功";}

运行代码后,观察 RabbitMQ 客户端:

前 15s:

15s 之后:

 

在前 15s,两个队列中均有信息,但由于 ttl.queue2 设置了 ttl,于是过了 15s 后,ttl.queue2 中的消息就被全部删除了。 

4. 同时给队列和消息指定过期时间

当同时给队列和消息指定过期时间后,消息的过期时间就以较小的 ttl 为准。

http://www.dtcms.com/a/266802.html

相关文章:

  • Spring Boot 应用启动时,端口 8080 已被其他进程占用,怎么办
  • 物联网中的Unity/Unreal引擎集成:数字孪生与可视化控制
  • 【Spring Boot】HikariCP 与 Druid 连接池全面对比
  • OpenCV中超分辨率(Super Resolution)模块类cv::dnn_superres::DnnSuperResImpl
  • 数字工厂的核心引擎:物联网驱动生产智能化升级
  • 前端查询条件加密传输方案(SM2加解密)
  • Flink SQLServer CDC 环境配置与验证
  • vue3 el-table 行筛选 设置为单选
  • Oreacle(SQL语言基础)
  • 【问题解决】VSCode终端中看不到Git-Bash
  • XILINX Kintex 7系列FPGA的全局时钟缓冲器(BUFG)和区域时钟缓冲器(BUFR/BUFH)的区别
  • 【PyTorch】PyTorch预训练模型缓存位置迁移,也可拓展应用于其他文件的迁移
  • HTTP协议利用TCP的特性来实现长连接
  • Compose笔记(三十)--图片选择器
  • 【Spring Boot】HikariCP 连接池 YAML 配置详解
  • 洛谷P1941 [NOIP 2014 提高组] 飞扬的小鸟
  • vue3 获取选中的el-table行数据
  • MySQL 查询进阶指南:子查询、多表连接与 UNION 操作全解析
  • SQL 快速参考手册-SQL001
  • Swagger 安装使用教程
  • 高效的在Vue3中使用Vuex
  • Android-自定义View的实战学习总结
  • python训练day49 CBAM
  • 流程分类框架体系设计应该梳理到L5还是L6?
  • DePIN 普惠结构的缺失拼图,为什么是 UBI Network?
  • js中的捕获阶段和冒泡阶段
  • vue2/3安装依赖报错,终极解决方案
  • Kuberrnetes 服务发布
  • 【MySQL】十六,MySQL窗口函数
  • Mint密室 · 猫猫狐狐的“特征选择”囚室逃脱