RabbitMQ的TLL

过期时间

RabbitMQ支持两种过期时间

  1. 队列级别:通过队列的属性设置,队列中所有消息都有相同的过期时间,一旦消息过期,就会从队列中抹去。设置队列级别的 TTL 主要目的是让消息在被消费之前自动过期和删除,从而避免无用消息长期占用资源。
  2. 消息级别:对消息本身进行单独设置,每条消息的 TTL 可以不同,即使消息过期,也不会马上从队列中抹去,因为每条消息是否过期是在即将投递到消费者之前判定的。

如果两种方法一起使用,则消息的 TTL 以两者之间较小的那个数值为准。消息在队列中的生存时

一旦超过设置 TTL 值时,就会变成"死信" (Dead Message) ,消费者将无法再收到该消息。

消息过期处理策略

  1. 队列级别:队列中己过期的消息肯定在队列头部, RabbitMQ 只要定期从队头开始扫描是否有过期的消息即可。
  2. 消息级别:每条消息的过期时间不同,如果要删除所有过期消息势必要扫描整个队列,所以不如等到此消息即将被消费时再判定是否过期 如果过期再进行删除即可。

死信队列

当消息在一个队列中变成死信 (dea message) 之后,它能被重新被发送到另一个交换器中,这个

交换器就是 DLX ,绑定 DLX 的队列就称之为死信队列。

消息变成死信 般是由于以下几种情况:

  1. 消息被拒绝并且设置 requeue 参数为 false
  2. 消息过期
  3. 队列长度达到最大长度
相关推荐
初次攀爬者17 小时前
ZooKeeper 实现分布式锁的两种方式
分布式·后端·zookeeper
让我上个超影吧2 天前
消息队列——RabbitMQ(高级)
java·rabbitmq
塔中妖2 天前
Windows 安装 RabbitMQ 详细教程(含 Erlang 环境配置)
windows·rabbitmq·erlang
断手当码农2 天前
Redis 实现分布式锁的三种方式
数据库·redis·分布式
初次攀爬者2 天前
Redis分布式锁实现的三种方式-基于setnx,lua脚本和Redisson
redis·分布式·后端
业精于勤_荒于稀2 天前
物流订单系统99.99%可用性全链路容灾体系落地操作手册
分布式
Ronin3052 天前
信道管理模块和异步线程模块
开发语言·c++·rabbitmq·异步线程·信道管理
Asher05092 天前
Hadoop核心技术与实战指南
大数据·hadoop·分布式
凉凉的知识库2 天前
Go中的零值与空值,你搞懂了么?
分布式·面试·go
?Anita Zhang2 天前
联邦学习实战:如何在分布式场景下构建隐私保护机器学习模型
人工智能·分布式·机器学习