订单业务时序图,强一致性,分布式事务MQ处理
如图,订单服务的Service层使用@Transation执行本地事务,调用库存,优惠券,支付微服务(同步调用),根据返回结果判断是否调用成功,如果有一个调用失败,向MQ发送回退消息。
库存,优惠券,支付微服务监听MQ中的指定topic和Tag的消息,根据消息内容进行相应的本地事物的 回滚(MQ的消息体要包含订单id,优惠券ID,金额,下单数量等全部内容,方便其他微服务回滚操作)
保证最终的订单,库存,优惠券,支付,4个微服务的事务一致性,要么一起成功,要么一起失败
代码结构库存,优惠券,支付微服务Service中使用@Tansation实现本地事务,如果操作失败手动抛异常RuntimeException,订单微服务catch到异常可以根据异常的信息判断是哪个微服务执行失败,向MQ中发送回滚信息
(项目框架:zk+dubbo+springboot+mybatis)