接口自身如何实现回滚
假如场景是给会员加钱,同时加积分,代码大致是这样,和什么语言无关,只说逻辑
开始事务
ret=给会员加钱
if(!ret){
报错输出
}
ret=给会员加积分
if(!ret){
事务回滚
报错输出
}else{
事务提交
成功输出
}
如果给会员加积分的是接口,那么代码逻辑是没问题的
但是如果给会员加钱的也是接口,假设加积分的接口返回错误,此时简单的sql回滚事务是没有意义的,需要有一个机制去回滚“给会员加钱的接口”
此时需要接口有回滚的机制,如果只是加钱,那么还可以,假如有几十句update或者insert,这怎么靠自己记录去回滚
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
使用分布式事务啊
简单讲,就是通过一个事务管理器来管理多个微服务中的本地事务。
事务管理器通知每个微服务都开启本地事务,
每个微服务都上报sql执行情况。
如果都执行成功,事务管理器下发事务提交命令。否则下发回滚命令。
所谓tcc,2阶段,3阶段解决的是事务管理器和每个微服务的通讯问题(分布式中最麻烦的就是通讯问题,无法保证100%可靠)。
如果是单体应用,一个事务共用一个数据库连接,(此时加钱和加积分,都会在一个事务中,),这样就保证同时成功或者同时失败,不需要你针对其他已经成功执行的sql再去做对应的还原操作了;
分布式的情况下,就看楼上大哥的就行了