情景描述:数据库
dubbo服务A:支付接口服务框架
dubbo服务B:订单状态更新分布式
正常流程,首先调用支付接口,支付成功后,再调用dubbo服务B更新订单状态;可是若是在调用dubbo服务B时失败,此时dubbo服务A中数据已没法回滚(事务已提交),此时该如何进行处理?性能
手动编写dubbo服务A回滚代码,在dubbo服务B调用失败时,进行该回滚代码调用,此方案只使用简单业务场景、冗余代码多。spa
使用JTA分布式事务,但这样很差的就是代码入侵性高以及性能问题。(本人也没有用过,网上这么讲的)。中间件
结合MQ消息中间件实现的可靠消息,来到达数据最终一致性(CAP理论)。接口
方案一不理想,方案2、三相关技术没具体接触过。事务
下图是项目中遇到的折中方案:dubbo
也就是说“dubbo服务A”便是提供者也是消费者(dubbo服务B的调用),只有在"dubbo服务B"调用成功的状况下才会对“dubbo服务A”事务提交。im
局限:
三个服务调用状况就是以下
至此,关于分布式服务框架-dubbo总结完毕!
额外提下,以前demo工程中主键id采用的数据库自增,在“分布式”局限性