JAVA全系列 教程
3762个小节阅读:7091k
目录
C语言快速入门
JAVA全系列 教程
面向对象的程序设计语言
Python全系列 教程
Python3.x版本,未来主流的版本
人工智能 教程
顺势而为,AI创新未来
大厂算法 教程
算法,程序员自我提升必经之路
C++ 教程
一门通用计算机编程语言
微服务 教程
目前业界流行的框架组合
web前端全系列 教程
通向WEB技术世界的钥匙
大数据全系列 教程
站在云端操控万千数据
AIGC全能工具班
A A
White Night
XAShardingSphereTransactionManager为Apache ShardingSphere 的分布式事务的 XA 实现类。它主要负责对多数据源进行管理和适配,并且将相应事务的开启、提交和回滚操作委托给具体的 XA 事务管理器。ShardingSphere整合XA事务时,分离了XA事务管理和连接池管理,这样接入XA时,可以做到对业务的零侵入。
ShardingSphere支持以下功能: 支持数据分片后的跨库XA事务; 两阶段提交保证操作的原子性和数据的强一致性; 服务宕机重启后,提交/回滚中的事务可自动恢复; SPI机制整合主流的XA事务管理器,默认Atomikos; 同时支持XA和非XA的连接池; 提供spring-boot和namespace的接入端。
开启全局事务
XAShardingSphereTransactionManager将调用具体的 XA 事务管理器开启 XA 全局事务,以 XID 的形式进行标记。
执行真实分片SQL
XAShardingSphereTransactionManager将数据库连接所对应的 XAResource注册到当前 XA 事务中之后,事务管理器会在此阶段发送XAResource.start命令至数据库。数据库在收到XAResource.end命令之前的所有 SQL 操作,会被标记为 XA 事务。
xxxxxxxxxx
XAResource1.start ## Enlist阶段执行
statement.execute("sql1"); ## 模拟执行一个分片SQL1
statement.execute("sql2"); ## 模拟执行一个分片SQL2
XAResource1.end ## 提交阶段执行
示例中的sql1和sql2将会被标记为 XA 事务。
提交或回滚事务
XAShardingSphereTransactionManager在接收到接入端的提交命令后,会委托实际的 XA 事务管理进行提交动作, 事务管理器将收集到的当前线程中所有注册的 XAResource,并发送XAResource.end指令,用以标记此 XA 事务边界。 接着会依次发送prepare指令,收集所有参与 XAResource 投票。 若所有 XAResource 的反馈结果均为正确,则调用commit指令进行最终提交; 若有任意 XAResource 的反馈结果不正确,则调用 rollback指令进行回滚。 在事务管理器发出提交指令后,任何 XAResource 产生的异常都会通过恢复日志进行重试,以保证提交阶段的操作原子性,和数据强一致性。
xxxxxxxxxx
XAResource1.prepare ## ack: yes
XAResource2.prepare ## ack: yes
XAResource1.commit
XAResource2.commit
XAResource1.prepare ## ack: yes
XAResource2.prepare ## ack: no
XAResource1.rollback
XAResource2.rollback
6. 常见的分布式事务解决方案有?
A 2PC、3PC
B XA
C 使用MQ
D 以上都对
答案
6=>D