消息中间件RabbitMQ的数据一致性问题 -- 转载
本篇博文为转载,❥(^_-) 。
转载连接如下:https://baijiahao.baidu.com/s?id=1683528889345165191&wfr=spider&for=pc
我们还是以线上购物为例:
很熟悉的网购下单页面 -
1、订单服务,需要创建订单
2、库存服务,需要扣减库存
3、支付服务,需要完成支付
4、积分服务,需要生成积分
… …
针对这笔订单,对于用户来说只有上述服务中的所有功能全部执行成功,下单才算是真正完成了。
而现实中这么多微服务间的数据传递,如果没有一个完善的保障机制,很难确保万无一失。
这个保障机制其实不难想到:
1、消息不能丢失
这是所有保障的基础。只要消息还在,其他问题都会有办法解决
RabbitMQ提供了消息持久化功能来支持
2、每一步都要确认
这是及时发现问题的关键。及早发现问题,影响范围控制在最小
RabbitMQ提供了发布确认、消息回发、接收确认功能来支持
3、执行结果要进行检查
这是最后的把关。只要有这个最后屏障,所有问题都会被发现
这需要业务服务间自己完成对账,RabbitMQ不参与业务逻辑,爱莫能助哦 -
4、消息丢失要补救
这是数据一致的最后一步,完成数据最终一致
发送方需要利用RabbitMQ完成补偿发送
橙色部分是RabbitMQ支持的,红色部分是需要服务间定制化开发的
好在有像RabbitMQ这样的消息中间件来辅助业务实现 _