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

rabbitmq 的 TTL

队列的 TTL

在这里插入图片描述

我们可以通过 ttl() 设置超时时间,单位是 ms

代码演示:

    @Bean("ttlQueue")public Queue ttlQueue() {return QueueBuilder.durable(MQConstants.TTL_QUEUE).ttl(20000).build();}

设置超时时间为 20s,这样在这条队列的所有的消息的过期时间都是 20s 【前提是你没有给消息单独设置过 TTL】
在这里插入图片描述
我们会发现队列多了一个属性 TTL,可以看到过期时间 为 20 000 ms

消息的 TTL

在这里插入图片描述

这里需要传入一个字符串,单位为毫秒

在发送消息那行代码将过期时间设置进去

    @RequestMapping("/ttl")public String ttl() {rabbitTemplate.convertAndSend(MQConstants.TTL_EXCHANGE, MQConstants.TTL_ROUTING_KEY, "ttl",messagePostProcessor -> {messagePostProcessor.getMessageProperties().setExpiration("10000");return messagePostProcessor;});return "消息发送成功";}

两者之间的区别

设置队列TTL属性的方法,一旦消息过期,就会从队列中删除设置消息TTL的方法,即使消息过期,也不会马上从队列中删除,而是在即将投递到消费者之前进行判定的。这样子做可以提高性能

为什么这两种方法处理的方式不一样?
因为设置队列过期时间,队列中已过期的消息肯定在队列头部,RabbitMQ只要定期从队头开始扫描是否有过期的消息即可。
而设置消息TTL的方式,每条消息的过期时间不同,如果要删除所有过期消息需要扫描整个队列,所以不如等到此消息即将被消费时再判定是否过期,如果过期再进行删除即可。

总结

有两种方法可以设置消息的TTL.
一是设置队列的TTL,队列中所有消息都有相同的过期时间
二是对消息本身进行单独设置,每条消息的TTL可以不同
如果两种方法一起使用,则消息的TTL以两者之间较小的那个数值为准。


文章转载自:

http://XYrIq2Um.ybhrb.cn
http://nrqkWHdO.ybhrb.cn
http://YAkInWzt.ybhrb.cn
http://95IMEguP.ybhrb.cn
http://oxUahn4R.ybhrb.cn
http://5hUSLt42.ybhrb.cn
http://Umcn3cPW.ybhrb.cn
http://oM79pGo4.ybhrb.cn
http://vjRC3Kcc.ybhrb.cn
http://tpfl8MVO.ybhrb.cn
http://YXVX0ioe.ybhrb.cn
http://gBduO17i.ybhrb.cn
http://BA5BbiRK.ybhrb.cn
http://Do4RjMCh.ybhrb.cn
http://UcpyYco7.ybhrb.cn
http://ocRwF2pz.ybhrb.cn
http://8HJC9kNk.ybhrb.cn
http://tlJBBQnc.ybhrb.cn
http://lAN1UAjD.ybhrb.cn
http://1o4xUqrr.ybhrb.cn
http://YTpcmplt.ybhrb.cn
http://dtJMFv45.ybhrb.cn
http://8vuBt3fL.ybhrb.cn
http://j1q9Eg5m.ybhrb.cn
http://uvVsuGoj.ybhrb.cn
http://SYE3sU7c.ybhrb.cn
http://NIeHBfNc.ybhrb.cn
http://rNy32D4a.ybhrb.cn
http://FEp2K44w.ybhrb.cn
http://f3Rgk9MK.ybhrb.cn
http://www.dtcms.com/a/371472.html

相关文章:

  • Linux内核网络的连接跟踪conntrack简单分析
  • Java Stream流:从入门到精通
  • java常见面试题杂记
  • SAP匈牙利新闻
  • Java全栈工程师的面试实战:从基础到高阶技术解析
  • 计算机毕设选题:基于Python+Django的B站数据分析系统的设计与实现【源码+文档+调试】
  • 【嵌入式】【树莓派】【大疆PSDK】用树莓派4B开发大疆行业无人机应用系统小结-【硬件篇】
  • 深度学习——自然语言处理NLP
  • 灾难性遗忘:神经网络持续学习的核心挑战与解决方案
  • bug | 事务粒度不能太大,含demo
  • 如何建立针对 .NET Core web 程序的线程池的长期监控
  • 41个开源大语言模型基准测试报告
  • unsloth 笔记:从最近的检查点继续微调
  • 区域导航系统 | 印度区域卫星导航系统(IRNSS/NavIC)深度解析
  • Linux服务器资源自动监控与报警脚本详解
  • 社交新零售时代本地化微商的发展路径研究——基于开源AI智能名片链动2+1模式S2B2C商城小程序源的创新实践
  • Tailwind CSS v4 终极指南:体验 Rust 驱动的闪电般性能与现代化 CSS 工作流
  • 模块--红外跟随避障模块
  • 使用MQTT.fx和ESP32连接Onenet平台
  • 功率器件固晶挑战:抗高温翘曲治具提升IGBT焊接强度30%
  • Text2Sql.Net架构深度解析:从自然语言到SQL的智能转换之道
  • UE5 基础应用 —— 10 - 控制台命令
  • Linux内核Syncookies机制:抵御SYN Flood攻击的坚实防线
  • Axum 最佳实践:如何构建优雅的 Rust 错误处理系统?(三)
  • 使用 nginx-module-vts 进行 Nginx 流量监控
  • 心路历程-Linux如何赋予权限?
  • 实验室服务器配置|通过Docker实现Linux系统多用户隔离与安全防控
  • QProxyStyle类中drawControl和drawComplexControl函数的区别是什么
  • 【Linux手册】管道通信:从内核底层原理到使用方法
  • LeetCode 几道 Promises 和 Time 的题目