分布式事务的管理--atomikos

在一些业务场景及技术架构下,跨库的事务时不可避免的,这时候如何统一管理事务,保证事务的强一致性是整个系统稳定、可用基石。一些中间件如tuxedo、cics就是凭借这个能力占据了金融、电信、银行等很大的市场,捞取了大量的利润。

在java中,atomikos作为一个开源项目(有商业版本),提供了分布式事务管理的能力。本文主要验证一下简单的业务场景,来测试一下atomikos管理下的分布式的事务一致性。

首先在一台机器准备两个mysql实例

1 下载安装第一个实例 http://mirrors.sohu.com/mysql/

mysqld -install net start mysql mysql -u root -p

2 安装第二个实例复制一份mysql目录 修改my-default.ini的端口号等信息: basedir = D:/Program Files/MySQL/MySQL Server datadir = D:/Program Files/MySQL/MySQL Server/data port = 3307

运行 mysqld --install mysql2 --defaults-file="D:\Program Files\MySQL\MySQL Server\bin\my-default.ini" net start mysql2

在两个库分别建立一个数据表:



DROP TABLE IF EXISTS account; CREATE TABLE account ( UserId int(11) NOT NULL, Money bigint(20) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8;



-- Records of account



INSERT INTO account VALUES (‘123‘, ‘0‘);

然后实现代码逻辑:

代码逻辑是实现随机的从1库转账一定金额到2库,或者从2库转账到1库。

在转账过程中,会安装一定概率发生异常,回滚整个事务。 运行一段时间后,查看两个库的金额是否能够对账争取。

具体代码见github:

https://github.com/wfb29/atomikos-test

时间: 2024-12-12 12:36:46

分布式事务的管理--atomikos的相关文章

Java事务(八) - 分布式事务 - spring + JTA + atomikos

一. 前言: 上一篇博客中,我们使用jotm实现了分布式事务, 本篇将使用atomikos实现. 基本的代码都是一样的,就是配置略有不同. 二. 代码实现: 1. 代码结构图: 2. 配置文件:ApplicationContext.xml <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans"

分布式事务JTA实现Atomikos与Spring集成实践

理解分布式事务JTA原理参见:http://www.ibm.com/developerworks/cn/java/j-lo-jta/ JTA实现产品介绍:http://blog.chinaunix.net/uid-122937-id-3793220.html Atomikos官网无法访问,不过Maven中央库中具atomikos包.Atomikos集成Spring,Hibernate,Mybatis网上文章比较多,本文是通过JavaSE的方式借用Spring配置来测试Atomikos对JTA的实

【分布式事务】使用atomikos+jta解决分布式事务问题

一.前言 分布式事务,这个问题困惑了小编很久,在3个月之前,就间断性的研究分布式事务.从MQ方面,数据库事务方面,jta方面.近期终于成功了,使用JTA解决了分布式事务问题.先写一下心得,后面的二级提交也会在研究. 二.介绍 分布式事务 说到分布式事务,可以理解为,由于分布式而引起的事务不一致的问题.随着项目做大,模块拆分,数据库拆分.一次包含增删改操作数据库涉及到了更新两个不同物理节点的数据库,这样的数据库事务只能保证自己处理的部分的事务,但是整个的事务就不能保证一致性. 网上针对分布式事务常

(附源码gitHub下载地址)spring boot -jta-atomikos分布式事务

应用场景:双数据源,就是某些项目会涉及到两个数据源或者两个以上的数据源,这个多数据源的项目一般是数据同步,也就是把数据从另一个系统中,保存到另一个系统,两边的 数据库又不一样,比如一个Mysql.一个Sql Server.但是不管是什么类型的数据库,我们都不管,直接连接就是. 为什么要使用分布式事务:顾名思义,事务就是回滚,比如如果一个在保存数据的时候,在A数据库已经 保存,但是在保存数据在B的过程抛出异常,那么是不是应该全部回滚,把已经 保存了的A.B数据库的数据全部回滚?答案是确定的.下面就

分布式事务几种方式

根据业务需求需要对业务进行拆分,例如将一个大应用拆分成用户模块,订单模块,商品模块,每个模块都有自己的数据库,在用户购买商品的时候需要扣减商品模块库存,在订单模块添加订单数据,这时候需要保证这两个数据库操作在同一个事务中完成,因此就出现了分布式事务 1. LCN事务模式一.原理介绍:LCN模式是通过代理Connection的方式实现对本地事务的操作,然后在由TxManager统一协调控制事务.当本地事务提交回滚或者关闭连接时将会执行假操作,该代理的连接将由LCN连接池管理.二.模式特点:该模式对

Spring.Net+WCF实现分布式事务

项目背景:ITOO.Teacher.Service提供一套访问教师数据库的WCF服务,ITOO.Student.Service提供一套访问学生数据库的WCF服务.学生服务端的B层在进行业务处理时,需要调用教师的WCF服务,我们需要在学生服务端的B层加上分布式事务处理,向教师库和学生库更新数据,要么都成功,要么都不成功. 1.在教师服务端,我们需要在WCF的接口上加上WCF分布式事务特性: [OperationContract] [TransactionFlow(TransactionFlowOp

如何实现一个TCC分布式事务框架的一点思考

一个TCC事务框架需要解决的当然是分布式事务的管理.关于TCC事务机制的介绍,可以参考TCC事务机制简介.http://www.bytesoft.org/tcc-intro TCC事务模型虽然说起来简单,然而要基于TCC实现一个通用的分布式事务框架,却比它看上去要复杂的多,不只是简单的调用一下Confirm/Cancel业务就可以了的. 本文将以Spring容器为例,试图分析一下,实现一个通用的TCC分布式事务框架需要注意的一些问题. 一.TCC全局事务必须基于RM本地事务来实现全局事务 TCC

Spring多数据源分布式事务管理/springmvc+spring+atomikos[jta]+druid+mybatis

项目进行读写分离及分库分表,在一个业务中,在一个事务中处理时候将切换多个数据源,需要保证同一事务多个数据源数据的一致性.此处使用atomikos来实现:最后附源码: 1:spring3.0之后不再支持jtom[jta]了,第三方开源软件atomikos(http://www.atomikos.com/)来实现. 2:org.springframework.transaction.jta.JotmFactoryBean类,spring-tx-2.5.6.jar中有此类,spring-tx-3.0.

spring+springMVC+Mybatis架构下采用AbstractRoutingDataSource、atomikos、JTA实现多数据源灵活切换以及分布式事务管理

背景: 1.系统采用SSM架构.需要在10多个MYSQL数据库之间进行切换并对数据进行操作,上篇博文<springMVC+Mybatis(使用AbstractRoutingDataSource实现多数据源切换时)事务管理未生效的解决办法> 2.第一步先通过AbstractRoutingDataSource实现了多数据源的灵活切换,但是后来发现事务不起作用: 3.发现问题是因为重复扫描service包导致第二次扫入容器的BEAN没有纳入事务管理,因此在springMVC的配置文件中排除了对Ser