seata分布式事务~XA模式 ~ langhai
2023-01-10 00:13:30
seata分布式事务~XA模式
XA模式分为两个阶段也就是 XA两阶段提交。
RM第一阶段的工作:
注册分支事务到TC,执行业务SQL是不提交的,然后把这个事务的状态通知TC。
RM第二阶段的工作:
接收TC的指令,分支事务执行提交或者回滚。
TC第二阶段的工作:
就是检查各个分支的事务执行状态。
分支执行事务全部成功 ==>> 通知所有RM提交事务。
分支事务有失败的情况 ==>> 通知所有RM回滚事务。
优点:
事务是强一致性的,满足ACID的原则。没有代码的侵入。
缺点:
但是性能相对来说较差,第一阶段会锁定数据库的资源,要等到第二阶段结束之后才会释放。
依赖关系型数据库实现。
seata实现方式:
在参与分布式事务的每一个微服务当中开启XA模式。
seata:
data-source-proxy-mode: XA
然后再分布式事务的入口加上注解
@GlobalTransactional
当程序出现异常的时候,可以在控制台观察到:
io.seata.rm.AbstractRMHandler : Branch Rollbacked result: PhaseTwo_Rollbacked
也可以在数据库中查看各个表中的数据是没有发生变化的,是成功回滚了的。