框架解析:
分布式事务框架本身并不创建事务,只是将同一个业务逻辑的多个事务进行统一管理,从而达到事务的一致性
核心步骤:
1、创建事务组
事务发起方在一开始就调用框架创建事务组,然后拿到groupId
2、添加事务至事务组
当一个模块执行完后,将事务结果添加至事务组
3、关闭事务组
当最后一个模块提交完后,事务组对结果进行判断,分别通知所有模块最终的事务结果(提交或回滚)
分布式事务控制原理:
事务控制原理是由事务模块下的代理连接池与事务组的协调配合完成的事务协调控制。
代理连接池实现了javax.sql.DataSource接口,并重写了close方法,事务模块在提交关闭以后连接池将执行"假关闭"操作,等待协调完成事务以后在关闭连接。
模拟场景演示
若存在事务发起方、参与方A、参与方B。调用关系图如下
那么他们正常执行业务的时序图为:
若参与方B出现异常,那么他们的业务时序图为:
注意事项:
1、当开始调用其他模块时,必须将groupId传过去
2、事务发起方必须有一个开始的标志
3、事务结束放必须有一个结束的标志
4、重写 Connection 接口时 Close 方法无需重写,当事务组所有逻辑处理完后再调用重写Close 方法