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

【RabbitMQ】Producer之TTL过期时间 - 基于AMQP 0-9-1

这篇文章和大家分享Producer发布消息时如何设置消息过期时间,包括队列级别和消息级别,还有如何设置队列的过期时间。

消息过期时间

给消息设置TTL,在超过TTL值后,消息就会变成dead message(死信),订阅此队列的消费者无法消费(也不是绝地的,后续文章会介绍解决办法)。只需要在申明队列的时候,设置x-message-ttl 值即可,注意这种方式是队列级别的,也就是队列中消息的过期时间都是一样的。下面是代码实现。

HashMap args = new HashMap<>();
args.put("x-message-ttl", 5 * 1000);
channel.queueDeclare(queue, true, false, false, args);

如果不设置消息的ttl,消息不会过期;如果ttl设置为0,除非可以直接投递给消费者,否则消息会被丢弃。

每条消息可以设置不同的TTL,所以每条消息在被投递到消费者之前,才会判断消息是否过期,这样就会存在一种情况,后面的消息比前面的先过期,但是消费者依然不能消费到后面的消息,必须前面的消息先被投递到消费者,RabbitMQ就是采用这种方案的。下面用一张图帮助理解。

设置消息级别的过期时间的代码实例如下。

AMQP.BasicProperties.Builder builder = new AMQP.BasicProperties.Builder(); 
builder.deliveryMode(2); // 持久化消息
builder expiration( 60000 ); // 设置 TTL=60000ms
AMQP.BasicProperties properties = builder.build();
channel.basicPublish(exchangeName, routingKey, mandatory, properties, "ttlTestMessage".getBytes());

队列过期时间

RabbitMQ不仅支持消息的TTL,还支持队列级别的TTL,可以通过x-expires 参数控制在队列删除之前处于未使用状态的时间,比如设置为1000,表示队列在1s之内,没有被使用,就会被删除。注意,队列级别的TTL不能设置为0。下面是代码实现。

HashMap args = new HashMap<>();
args.put("x-expires", 20000);
channel.queueDeclare(queue, true, false,false, args);

队列级别的TTL和消息级别的TTL不一样,因为不用考虑每条消息的TTL,只要队列到了TTL,就可以被删除。

好了,以上就是关于Producer设置消息级别和队列级别的TTL,以及设置队列本身的TTL

RabbitMQ系列文章会陆续更新,欢迎各位小伙伴关注后面的技术分享。

相关文章:

  • 【智能体架构:Agent】LangChain智能体类型ReAct、Self-ASK的区别
  • Sentinel-2哨兵2号数据提取指定区域NDVI值,映射冬小麦苗情分级,并且通过前端直接加载tif文件渲染效果
  • TMS320F28P550SJ9学习笔记3:SCI通信的特性与Sysconfig配置发送功能
  • 001.words and phrases
  • Golang实践录:go发布版本信息收集
  • llm + rag
  • VsCode 快捷键备忘
  • <03.05>Leetcode2
  • 如何为亚马逊季节性产品搭建高效的推广流程?
  • 解决新建小程序页面文字顶在顶部问题
  • CyberDefenders----DanaBot Lab
  • 【Java学习】String类变量
  • 电力设备基础概念解析
  • threejs:用着色器给模型添加光带扫描效果
  • 如何下载安装 PyCharm?
  • Libgdx游戏开发系列教程(5)——碰撞反弹的简单实践
  • 本地部署pangolin获取谱系,从而达到预测新冠的流行趋势
  • NetBeans 8.2 开发 CIFLog3.5 - 创建WelcomeDemo
  • 第十二届蓝桥杯大学A组java省赛答案整理
  • 突破传统:用Polars解锁ICU医疗数据分析新范式
  • 上海黄浦江挡潮闸工程建设指挥部成立,组成人员名单公布
  • 上海制造佳品汇大阪站即将启幕,泡泡玛特领潮出海
  • 陈吉宁龚正黄莉新胡文容等在警示教育基地参观学习,出席深入贯彻中央八项规定精神学习教育交流会
  • 【社论】公平有序竞争,外卖行业才能多赢
  • 女外交官郑璇已任中国驻莫桑比克大使
  • 杭勇已任常州市政协党组成员,此前任常州市委常委、秘书长