如果在一个逻辑下包含本服务自身事务异常回滚+远程服务器里的事务异常回滚
就涉及到分布式异常
在分布式事务中
A1
B
A2
上面的逻辑就涉及远程调用B服务器的事务异常逻辑
两个情况:
情况一:A无异常 数据库正常操作 B因为远程调用返回给A的是操作失败
A以为B事务异常 所以A操作数据库逻辑回滚 数据库无变动
但其实B只是 因为远程操作时长过长导致失败 网络抖动等都是原因 B已经在数据库里做了操作 数据库记录已经变化
情况二:
A2出现异常 抛出异常 希望 A1和 B都事务回滚 数据库操作
A1还好说因为都在同一段代码里 可以直接回滚 但是B无法直接回滚 因为B在另一个服务器里 除非我们调用B 否则无法回滚 因为事务是一个链接
不要求强一致 远程的库存扣了就扣了 无法立即在同一时间回滚 但是可以等一会慢慢的 最终一致 远程库存回滚把减了的库存再加回来就行 不用此时事务同时回滚
一两个系统不可用 为了保证稳定性 我们会将部分客户转到降级页面 (当前页面不可用)
已经提交的事务,说明事务已经完成,rollback就不再有作用。在执行事务的过程中,只有两个结果,意思commit,一是rollback
如果是MySQL,请注意表类型
祝好运,望采纳。