请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

假如有一个接口需要调用服务A和服务B,这两个都需要操作数据库,服务A成功了,服务B失败了

老师好,假如有一个接口需要通过http调用服务A和服务B,这两个都需要操作数据库,服务A成功了,服务B失败了,那么是不是事务是不会回滚的,需要自己写补偿机制?

正在回答 回答被采纳积分+3

2回答

慕的地5059815 2021-09-16 15:22:19

这个涉及到分布式事务问题,像这种分布式事务的数据一致性问题,也有很多经典的解决方案,可以去了解一下,只有结合业务需要权衡ACP原则,像CP强一致性要求比较高的,比较经典的  结合 二阶段提交+读写相等+raft同步的方式,完美解决强一致性问题,但是缺点就是效率低下,基本不会采纳;往往对数据实时性不高的数据一致性问题,更注重AP可用性原则,比较多的有 TCC设计原则,还有借助消息中间件的方式去做一个异步确保型的数据一致性,比较经典的实现就是借助RocketMq事务型消息的能力 去实现达到最终一致性的。

0 回复 有任何疑惑可以回复我~
刘果国 2018-05-15 21:37:17

是的哦,这就属于分布式事务的范畴啦

0 回复 有任何疑惑可以回复我~
  • 提问者 微暖丶温情 #1
    如果是dubbo这种,RPC调用,是不是也会有这种问题
    回复 有任何疑惑可以回复我~ 2018-05-15 22:50:53
  • 刘果国 回复 提问者 微暖丶温情 #2
    是的 跟通讯协议没有关系了,跨库业务都涉及到
    回复 有任何疑惑可以回复我~ 2018-05-16 07:50:51
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信