XA/二阶段提交
基于XA协议的二阶段提交
所谓的 XA 方案,即:两阶段提交,有一个事务管理器的概念,负责协调多个数据库(资源管理器)的事务,事务管理器先问各个数据库准备好了吗?如果每个数据库都回 ok,那就正式提交事务,在各个数据库上执行操作;如果任何其中一个数据库回答不 ok,那么就回滚事务。
这种分布式事务方案,比较适合单块应用里,跨多个库的分布式事务,而且因为严重依赖于数据库层面来搞定复杂的事务,效率很低,不适合高并发的场景。
JTA
JTA只是Java实现XA事务的一个规范,全称Java
事务规范JTA(Java Transaction API)
,我们日常使用的@Transactional。
都可以叫JTA事务管理。实际上,JTA是基于XA架构上建模的,
对于Spring来说,可以使用如JBoss之类的应用服务器提供的JTA事务管理器;可以以使用Atomikos、Bitronix等库提供的JTA事务管理器。Spring都有封装,开箱即用。
链式
对于Spring,还有个链式事务管理,就是声明一个ChainedTransactionManager 将所有的数据源事务按顺序放到该对象中,则事务会按相反的顺序来执行事务。事务依次提交后提交的事务若出错不能回滚。
1.start message transaction
2.receive message
3.start database transaction
4.update database
5.commit database transaction
6.commit message transaction ##当这一步出现错误时,上面的因为已经commit,所以不会rollback
和JTA比起来,更轻量,但只能单机用。