接口自身如何实现回滚

新手上路,请多包涵

假如场景是给会员加钱,同时加积分,代码大致是这样,和什么语言无关,只说逻辑

开始事务
ret=给会员加钱
if(!ret){
    报错输出
}
ret=给会员加积分
if(!ret){
    事务回滚
    报错输出
}else{
    事务提交
    成功输出
}

如果给会员加积分的是接口,那么代码逻辑是没问题的

但是如果给会员加钱的也是接口,假设加积分的接口返回错误,此时简单的sql回滚事务是没有意义的,需要有一个机制去回滚“给会员加钱的接口”

此时需要接口有回滚的机制,如果只是加钱,那么还可以,假如有几十句update或者insert,这怎么靠自己记录去回滚

阅读 3.8k
2 个回答

使用分布式事务

简单讲,就是通过一个事务管理器来管理多个微服务中的本地事务。

事务管理器通知每个微服务都开启本地事务,
每个微服务都上报sql执行情况。
如果都执行成功,事务管理器下发事务提交命令。否则下发回滚命令。

所谓tcc,2阶段,3阶段解决的是事务管理器和每个微服务的通讯问题(分布式中最麻烦的就是通讯问题,无法保证100%可靠)。

如果是单体应用,一个事务共用一个数据库连接,(此时加钱和加积分,都会在一个事务中,),这样就保证同时成功或者同时失败,不需要你针对其他已经成功执行的sql再去做对应的还原操作了;
分布式的情况下,就看楼上大哥的就行了

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题