RabbitMq高级特性:TTL,死信队列,延迟队列

本篇博客基于SpringBoot + Spring AMQP来写,代码实现和API调用均使用Spring AMQP的封装展开,和原生amqp-client SDK原理一致,但代码实现会有所不同

目录

一,TTL

应用场景

队列设置TTL

消息设置TTL

二,死信队列

三,延时队列

两种实现方式:

[一,使用TTL + 死信队列](#一,使用TTL + 死信队列)

二,使用延迟队列插件

应用场景


一,TTL

TTL:过期时间,队列和消息都可以设置TTL

应用场景

1,结合死信队列实现延时队列 2,订单超时自动取消 3,定时提醒 等等

队列设置TTL

消息设置TTL

给队列设置TTL,队列过期,所有消息被删除,给消息设置TTL,消息过期不会被立刻删除,而是等到消息在即将被发送给消费者时进行判断,如果已经过期则删除。

二,死信队列

死信:各种原因导致的消息无法被消费的消息称为死信。当消息变成死信之后就会被重新发送到另外的交换机进而把消息放到死信队列。

什么情况消息会变成死信:1,消费者拒绝该消息,或者指定消息不能重新入队

2,消息过期 3,队列达到长度限制(长度可设置) 4,重试次数达到上限

需要实现正常队列和死信交换机之间的绑定

三,延时队列

两种实现方式:

一,使用TTL + 死信队列

这种方式存在明显短板:由于队列先进先出的特点,如先后发送两条数据,第一条过期时间为20s,第二条过期时间为10s,那么就会出现第二条消息早就过期了还没有进入死信队列,因为第一条消息没有过期,第二条消息只能等第一条消息过期之后一起进入死信队列,时效性很差。

二,使用延迟队列插件

RabbitMq官方提供了延迟队列差插件,具体如何下载这里省略
: https://www.rabbitmq.com/blog/2015/04/16/scheduling-messages-with-rabbitmq
下载后插件之后RabbitMq的web控制台创建交换机的类型选项就多了一个x-delaayed-message的类型,使用方法和其他类型交换机相同。

延迟队列不是消息到达交换机后立刻进行转发,而是到达指定时间之后再由交换机路由到队列,消费者监听该队列,有了消息之后立刻拿来消费。

应用场景

1,订单超时自动取消

2,用户发起退款,超时自动审批

3,任务的定时提醒

相关推荐
Hvitur6 分钟前
Java - Lambda
java·开发语言·python
apcipot_rain5 小时前
C++转Java日记(06)
java·开发语言
金銀銅鐵10 小时前
带您看懂字节码指令(一):一帧里有什么
java·后端·ai编程
nice_lcj52012 小时前
【从零理解 Spring AI · 14】RAG 的四个环节:加载、切分、向量化、检索
java·spring boot·embedding·向量数据库·rag·spring ai·ai应用开发
学长毕设13 小时前
基于springboot科创竞赛信息平台-附源码
java·spring boot·后端
聪明的笨猪猪14 小时前
Java 工程案例:AI 生成 @Async 异步线程池踩坑
java·经验分享·面试·ai编程
学长毕设14 小时前
基于SpringBoot公务员考试交流平台-附源码
java·spring boot·后端
SL_staff16 小时前
私有化低代码:面向强监管行业的可控数字化实践
java·低代码
三翼鸟数字化技术团队17 小时前
高性能存储引擎RocksDB:原理与Java生态实践
java
SL_staff17 小时前
JVS-APS有限产能建模的七个刚性支点:面向产线真实约束的技术实现解析
java·开源·全栈