1.订单系统生成订单号,扔给一个差错恢复系统(存储在自己的db)
2.订单系统拿订单号调用库存系统,如果失败,则回滚库存(不管回滚成功或者失败,都通知前台失败)
3.订单系统拿订单号调用优惠券系统减少优惠券,如果失败,则回滚库存、回滚优惠券(不管回滚成功或者失败,都通知前台失败)
4.开启本地事物,创建订单记录
差错恢复系统每隔30秒捞取db中订单号,查询订单系统,如果订单记录ok,说明数据全部一致
如果没有订单记录,则根据订单号查询库存系统,如果库存已经回滚,则ok,否则调用库存回滚接口,重试直到成功
如果没有订单记录,则根据订单号查询优惠券系统,如果优惠券已经回滚,则ok,否则调用优惠券回滚接口,重试直到成功