1.消息可靠性保障

https://www.bilibili.com/video/BV15k4y1k7Ep?p=34
需求:
百分百确保消息发送成功
解决方法:
正常情况
1.producer生产者执行入库操作(自己的数据库);
2.producer生产者发送一条消息给Q1(消息队列);
3.consumer消费Q1队列的消息,并且执行入库操作(自己的数据库);
4.consumer消费成功,发送一条确认消息到Q2队列(此时consumer充当生产者角色);
5.回调检查服务(单独的应用)监听确认Q2队列的消息,将消息写入到消息的数据库表里。
异常情况
producer入库成功,consumer消费失败
解决方案:
1.producer延迟发送消息到Q3队列(对应图中第3步);
2.回调检查服务(单独的应用)监听确认Q3队列的消息,将消息写入到消息的数据库表里,比对数据库里面id与Q3队列的消息id是否一致。如果一致,Q2队列里面的消息肯定被消费了,如果不一致,肯定消费失败,此时走第3步。
3.如果回调检查失败,回调检查服务通知生产者producer重新发送消息,继续走如上的流程。
4.加入发送消息失败,延时发送消息也失败,此时需要定时检查服务(单独的应用),每隔一段时间检查业务数据的db与消息数据的db两个数据是否匹配(id比对),检查发现如果业务数据的消息多了或者匹配不上了,此时定时检查服务通知生产producer重新发送消息,继续走如上的流程。
2.消息幂等性保障
我靠,幂等保障就是乐观锁控制啊

https://www.bilibili.com/video/BV15k4y1k7Ep?p=35