接口自身如何实现回滚

发布于 2022-09-12 23:53:34 字数 339 浏览 22 评论 0

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

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

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

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

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

水波映月 2022-09-19 23:53:34

使用分布式事务

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

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

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

⒈起吃苦の倖褔 2022-09-19 23:53:34

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文