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,任务的定时提醒

相关推荐
xcl092517 小时前
北京24小时自助健身房系统软件开发实战:从架构到部署全流程指南
java·spring boot·架构
灯澜忆梦18 小时前
【RabbitMQ #10】 | MQ可靠性
分布式·rabbitmq
一 乐19 小时前
动漫书销售商城|基于springboot + vue动漫书销售商城(源码+数据库+文档)
java·数据库·vue.js·spring boot·毕业设计
卓怡学长19 小时前
w214基于jsp知道特产网
java·intellij-idea
步行cgn19 小时前
Spring 注解使用详解
java·spring
一条小小yu19 小时前
Spring IoC的理解
java·后端·spring
落魄实习生20 小时前
Agent Scope Java 2.x 系列【7】工具使用
java·开发语言·ai
旺仔学长 哈哈20 小时前
springboot钓鱼爱好者交流平台APP设计与实现
java·spring boot·mysql·充电桩管理系统
醉颜凉21 小时前
Kafka 与 RabbitMQ/RocketMQ 选型对比:场景匹配、性能基准与迁移成本
kafka·消息队列·rabbitmq·rocketmq·中间件选型