远程调用时用本地事务不会回滚

Python013

远程调用时用本地事务不会回滚,第1张

异常回滚在同一个服务器中很简单

如果在一个逻辑下包含本服务自身事务异常回滚+远程服务器里的事务异常回滚

就涉及到分布式异常

在分布式事务中

A1

B

A2

上面的逻辑就涉及远程调用B服务器的事务异常逻辑

两个情况:

情况一:A无异常 数据库正常操作 B因为远程调用返回给A的是操作失败

A以为B事务异常 所以A操作数据库逻辑回滚 数据库无变动

但其实B只是 因为远程操作时长过长导致失败 网络抖动等都是原因 B已经在数据库里做了操作 数据库记录已经变化

情况二:

A2出现异常 抛出异常 希望 A1和 B都事务回滚 数据库操作

A1还好说因为都在同一段代码里 可以直接回滚 但是B无法直接回滚 因为B在另一个服务器里 除非我们调用B 否则无法回滚 因为事务是一个链接

不要求强一致 远程的库存扣了就扣了 无法立即在同一时间回滚 但是可以等一会慢慢的 最终一致 远程库存回滚把减了的库存再加回来就行 不用此时事务同时回滚

一两个系统不可用 为了保证稳定性 我们会将部分客户转到降级页面 (当前页面不可用)

已经提交的事务,说明事务已经完成,rollback就不再有作用。

在执行事务的过程中,只有两个结果,意思commit,一是rollback

如果是MySQL,请注意表类型

祝好运,望采纳。