Sharding-JDBC目前还整合其他分布式事务模式来解决事务问题,今天就来介绍一下两阶段事务XA是如何解决分布式事务
公司主营业务:网站设计、成都网站制作、移动网站开发等业务。帮助企业客户真正实现互联网宣传,提高企业的竞争能力。创新互联是一支青春激扬、勤奋敬业、活力青春激扬、勤奋敬业、活力澎湃、和谐高效的团队。公司秉承以“开放、自由、严谨、自律”为核心的企业文化,感谢他们对我们的高要求,感谢他们从不同领域给我们带来的挑战,让我们激情的团队有机会用头脑与智慧不断的给客户带来惊喜。创新互联推出阿克苏免费做网站回馈大家。
XA 规范 是 X/Open 组织定义的分布式事务处理(DTP,Distributed Transaction Processing)标准。
XA 规范描述了全局的事务管理器与局部的资源管理器之间的接口。XA规范的目的是允许多个资源(如数据库,应用服务器,消息队列等)在同一事务中访问,这样可以使 ACID 属性跨越应用程序而保持有效。
XA 规范使用两阶段提交来保证所有资源同时提交或回滚任何特定的事务。
XA 事务的基础是两阶段提交协议。需要有一个事务协调者来保证所有的事务参与者都完成了准备工作(第一阶段)。如果协调者收到所有参与者都准备好的消息,就会通知所有的事务都可以提交了(第二阶段)。
MySQL 在这个 XA 事务中扮演的是参与者的角色,而不是协调者(事务管理器)。
MySQL中的XA事务分为外部XA和内部XA:
基于XA规范分布式事务对业务是无侵入的,用户可以像使用本地事务一样使用基于XA规范的分布式事务。
但是基于XA规范的分布式事务属于强一致性事务,性能比较低,尤其在长事务的情况下,对资源的锁定时间较长,一般适用于短事务、低并发的场景。
接下来就以为MySQL中XA来演示一下,如下;
上述命令什么意思呢?解析如下:
Sharding-JDBC目前已经整合了XA事务的支持,支持的Atomikos、NARAYANA 、BITRONIX 事务的实现,默认的实现是Atomikos。下面将以Atomikos为例子介绍一下Sharding-JDBC如何实现XA事务
SharingSphere是通过SPI的方式去定制分布式事务解决方案的,XA的默认实现是org.apache.shardingsphere.transaction.xa.XAShardingTransactionManager,有兴趣的可以看下其中源码
后文介绍到的弱一致性事务使用Seata的AT模式,对应的是org.apache.shardingsphere.transaction.base.seata.at.SeataATShardingTransactionManager
当然Seata也是支持XA事务,如果后续改写的话,可以通过SPI的方式的定制
1. 添加依赖
使用XA事务需要添加一个依赖,如下:
org.apache.shardingsphere
sharding-transaction-xa-core
可以看到这个依赖中内置了ATOMIKOS,如下:
2. 配置事务管理器
使用事务之前当然需要配置一个事务管理器,这里和Spring Boot 中配置没差别,如下:
@Configuration
@EnableTransactionManagement
public class TransactionConfiguration {
@Bean
public PlatformTransactionManager txManager(final DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
}
3. @ShardingTransactionType注解
想要开启XA分布式事务还需要使用一个注解@ShardingTransactionType,其中的value属性的值如下:
那么显然这里只需要配置TransactionType.XA就能开启XA事务的支持
伪代码如下:
@ShardingTransactionType(value = TransactionType.XA)
@Transactional
public void method(){
//跨库操作
..............
}
4. 启动测试
演示的源码请看视频教程中的源码,需要注意的是Atomikos会在项目的logs目录下生成xa_tx.log文件,其中记录了事务日志,在XA崩溃恢复时所需要的日志,一定不要删除
对于Atomikos的一些配置可以通过在项目的classpath中添加jta.properties来定制化Atomikos配置项,这里就不再给大家详细介绍了。
网页名称:一个注解搞定分布式事务
URL标题:http://www.shufengxianlan.com/qtweb/news23/4523.html
网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联