rabbitmq消息补偿与幂等保障

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

版权声明:本文为hanbingge123原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。