消息的可靠性问题,保证状态一致性

生产者的可靠性
- 生产者重连
- 生产者连接失败的失败重试连接

- 生产者确认
- 到达交换机后,路由失败,基本不会出现这种情况;
- 到达交换机后,到达队列;
- 到达交换机后,到达队列后,持久化;

- 确认时选异步回调 以下2种配置都要写
- ConfirmCallback 确认 "消息到交换机";
- ReturnCallback 确认 "消息从交换机到队列"。
- 生产确认配置

- 编写消息成功或失败后的回调函数 ConfirmCallback 确认 "消息到交换机";

- 实际代码 ConfirmCallback 确认 "消息到交换机";

- 生产者确定代码 ReturnCallback 确认 "消息从交换机到队列"。

- 实际代码 ReturnCallback 确认 "消息从交换机到队列"。


MQ的可靠性

- 数据持久化解决MQ不可靠的问题
- MQ自动将交换机和队列设置为持久化

- 消息持久化


- 消息非持久化和持久化的方式对比
- 非持久化,会出现阻塞情况

- 消息持久化的方式


LazyQueue 直接存磁盘,消费时读取到内存

- 控制台

- Java代码声明队列

- 直接存入内存


消费者的可靠性
- 消费者确认机制

- 一般只要配置好自动,一旦失败,就会无限次数的重复投递消息;

- 失败重试机制 , 限制失败次数

- 如果多次重试仍然失败该怎么办?

- 重试耗尽后,将失败消息投递到指定交换机

- 代码实现 创建error交换机,error队列,绑定交换机和队列
- 这个prefix,name,havingValue里的值,可千万别写错了;

