死信队列实现与延迟队列内容讲解
树图思维导图提供 RabbitMQ03死信-延迟队列脑图 在线思维导图免费制作,点击“编辑”按钮,可对 RabbitMQ03死信-延迟队列脑图 进行在线思维导图编辑,本思维导图属于思维导图模板主题,文件编号是:94453bff0ac84fbb2657ddebec01a432
RabbitMQ03死信-延迟队列-可靠性投递思维导图模板大纲
在实际开发项目是,较为重要的业务, 需要确保未被消费的消息不能被丢弃,eg:订单业务
当消息消费发生异常时,将消息投入到死信队列中进行处理
死信队列
RabbitMQ中并不是直接声明一个公共的死信队列,然后死信消 息就会跑到死信队列中
而是为每个需要使用死信的消息队列配置一个死 信交换机,当消息成为死信后,可以被重新发送到死信交换机,然后再发 送给使用死信的消息队列。
死信交换机
英文缩写:DLX 。Dead Letter Exchange(死信交换机)
死信交换机其实就是普通的交换机,通过给队列设置参数: x-dead-letterexchange 和x-dead-letter-routing-key,来指向死信交换机
图解
死信
RabbitMQ规定 消息符合以下某种情况时,将会成为死信
队列消息长度达到限制(队列消息个数限制)
消费者拒绝消费消息,
basicNack
basicReject
并且不把消息重新放回原目标队列
原队列存在消息过期设置,消息到达超时时间未被消费
死信消息会被RabbitMQ特殊处理,如果配置了死信队列,则消息会被丢到 死信队列中,如果没有配置死信队列,则消息会被丢弃
引入依赖
创建application.yml进行配置
创建配置类
创建controller生产者
创建普通广播模式消费者Listener
创建死信消费者Listener
过期时间
过期时间+死信队列也可以实现延迟队列操作
在RabbitMQConfiguration配置类中设置过期时间
队列消息长度限制
在RabbitMQConfiguration配置类中设置队列能存放消息的个数
延迟队列简介
延迟队列,即消息进入队列后不会立即被消费,只有到达指定时间后,才 会被消费
RabbitMQ中没有延迟队列,但是可以用
ttl+死信队列方式
延迟插件
ttl+死信队列
延迟插件
使用延迟插件时,只需要声明一个 x-delayed-message 类型的交换器
config
controller
listener
RabbitMQ消息可靠性投递主要从三方面考虑
生产阶段
RabbitMQ生产者保证消息不丢失,主要是保证生产者可以尽量100%的将 消息发送给RabbitMQ。
生产者保证消息不丢失有两种方式:事务和Confirm。
RabbitMQ事务
txSelect() txCommit() txRollback()
发送方消息确认机制(Confirm模式)
. 同步方式
. 异步方式
存储阶段
exchange持久化
第三个参数true表示这个exchange持久化
queue持久化
第二个参数true表示这个queue持久化。
message持久化
MessageProperties.PERSISTENT_TEXT_PLAIN表示这条消息持久化。
消费阶段
消息入库(消息补偿)
如果RabbitMQ收到消息还没来得及将消息持久化到硬盘时,RabbitMQ挂 了,这样消息还是丢失了,或者RabbitMQ在发送确认消息给生产端的过程 中,由于网络故障而导致生产端没有收到确认消息,这样生产端就不知道 RabbitMQ到底有没有收到消息,这样也不太好进行处理。所以为了避免 RabbitMQ持久化失败而导致数据丢失,我们自己也要做一些消息补偿机 制,以应对一些极端情况。
思维导图模板大纲