关于分布式事务的方案,大家看看有没有漏洞?
1. 扣库存(服务A)
2. 扣钱(服务B)
3. 加物流信息(服务C)
+ 服务A(写数据库,调服务B,发消息到mq)
1. 写日志。(log或数据库,写请求信息)(调B系统还没返回时(其实成功了),服务重启或宕机的情况追踪),或者持久化任务表,后续异常重试调服务B,获取最终结果。
2. 扣库存,调服务B(同一个事务)
- 成功。提交数据库,扣库存。
- 失败。抛异常回滚。
- 超时。(重试几次,仍然失败则抛异常回滚,但是后续要继续重试取消扣库存)
3. 物流信息,非强一致性数据。发消息到mq,由各个业务方订阅。
- 持久化可靠mq,保证最终一致性
- 不可靠mq,服务A还要提供接口供服务C主动拉取