微服务分布式不一致问题和解决
2021-10-20 10:29:15 0 举报
微服务分布式不一致问题和解决
作者其他创作
大纲/内容
不一致解决:可靠消息最终一致性方案
不一致解决: 记日志表
消息队列
定时回查订单状态
无效订单扫描定时任务
Consumer库存服务
进行步骤 \"3.send\"
删除该消息(创建订单 执行一半异常结束了)
3. send
扣库存
日志状态status 取值: 1. 未处理日志(初始状态)2. 已处理日志
4. send
确认发送消息
是
5. ack
2. confirm
订单服务
创建订单
预发送消息
该消息置为 confirm状态,(通常是由于 创建订单成功 但 \"2.confirm\" 没发出)
订单库
库存库
定时回查订单状态:定时执行以下过程
库存服务
主要解决的问题是: 创建订单 成功 但是 \"2.confirm\" 没发出去, 即 订单创建成功 但是 库存没扣, 最终导致超卖。
消费成功
Producer订单服务
若步骤1执行成功,步骤2也执行成功,但是步骤2经过网络返回时 网络出问题 导致订单服务没有接收到 步骤2的响应。所以 订单服务 会 回滚 步骤1中的sql,此时形成了 订单库和库存库不一致问题
步骤2.2: 调用扣库存接口
向订单服务回查处于prepare状态的消息是否已经是创建成功了?
步骤1: 执行创建订单sql
不一致形成
步骤2: 调用扣库存接口
下单并扣库存
否
记日志表+定时任务剔除不一致部分来解决
1. prepare
独立消息服务
0 条评论
下一页
为你推荐
查看更多