1、RabbitMQ极端场景:
- 1.在生产环境中
由于一些不明原因,导致 rabbitmq 重启
,在 RabbitMQ 重启期间生产者消息投递失败,导致消息丢失
,需要手动处理和恢复。于是,我们开始思考,如何才能进行 RabbitMQ 的消息可靠投递呢?特别是在这样比较极端的情况,RabbitMQ集群不可用的时候,无法投递的消息该如何处理呢
2、确认机制方案
- 1.这里的高级指的是:
对生产者发送的消息进行缓存
- 2.比如说,
当MQ中的信道或者队列挂掉了,也没有缓存,那么生产者发送出的消息就没有后续了
,生产者自己也无法知道信道或者队列挂掉了 - 3.所以说,对生产者发送的消息进行缓存,是有必要的
3、发布确认高级实现:
3.2. 编码实现MQ的基础流程:
a.配置文件:
- 1.在配置文件当中需要添加:
spring.rabbitmq.publisher-confirm-type=correlated
- NONE:禁用发布确认模式,是默认值
- CORRELATED:发布消息成功到交换器后会触发回调方法
b.添加配置类:
c.消息生产者:
d.消息消费者
3.3.编写回调接口:
a.高级体现的情况:
- 1.交换机和对列因为各种情况导致无法收到消息:
b.编码实现:
- 1.防止发送的消息MQ无接收,消息丢失的问题:
- 2.我继承实现的是一个内部接口,实现了内部接口后写了一个实现类,但是这个实现类并不在RabbitTemplate里面,所以导致RabbitTemplate调用自身的ConfirmCallback接口的时候,根本找不到这个实现类,所以要把我写的实现类注入到RabbitTemplate中。