阿里的分布式事物gts目前是收费的,具体收费规则和使用文档参见:https://help.aliyun.com/document_detail/69394.html
使用步骤,首先需要去开通阿里的分布式事物gts,登录阿里云的管理控制台:https://txc.console.aliyun.com/app/index.htm
点击创建事物分组
填上自己的事物分组,创建成功后会生成你的分组名称,例如 mygts.1108003305224791.SH
阿里gts所需的pom.xml
<!-- TXC -->
<dependency>
<groupId>com.taobao.txc</groupId>
<artifactId>txc-client</artifactId>
<version>2.0.72</version>
<scope>system</scope>
<systemPath>${basedir}/src/main/java/lib/txc-client-2.0.72.jar</systemPath>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.0.9.RELEASE</version>
</dependency>
<dependency>
<groupId>com.alibaba.dauth</groupId>
<artifactId>sdk-client</artifactId>
<version>1.2.3</version>
</dependency>
<!-- OTHERS -->
<dependency>
<groupId>cglib</groupId>
<artifactId>cglib</artifactId>
<version>3.1</version>
</dependency>
<dependency>
<groupId>io.netty</groupId>
<artifactId>netty-all</artifactId>
<version>4.1.0.Final</version>
</dependency>
<dependency>
<groupId>com.taobao.middleware</groupId>
<artifactId>logger.api</artifactId>
<version>0.1.5</version>
</dependency>
<dependency>
<groupId>com.taobao.diamond</groupId>
<artifactId>diamond-client</artifactId>
<version>edas-3.7.3</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<version>1.1.7</version>
</dependency>
这里需要阿里的gtx的jar包,https://download.csdn.net/download/huqiankunlol/11045438
然后我们需要配置 gtxconfig
@Configuration
public class GTXConfig {
//定义声明式事务,要想让事务annotation感知的话,要在这里定义一下
@Bean(name = "txcScanner")
@ConfigurationProperties(prefix="aluser")
public TxcTransactionScaner txcTransactionScaner()
{
//xxxx填写txc的逻辑组名
return new TxcTransactionScaner("xxxx");
}
}
这里还需要设置你的访问密钥和私钥,在你的阿里云控制台设置,然后配置在你的配置文件中
aluser.accessKey=xxxx
aluser.secretKey=xxxxxxxx
在你的代码中,使用阿里的分布式事物注解 @TxcTransaction
@Autowired
AccDAO adao;
@Autowired
AccTwoDAO atdao;
@TxcTransaction
public void transferAccount(int money){
adao.setmoney(money);
acdao.setmoney(money);
}
这里采用的是多数据源,两个dao连接的是不同的数据库,多数据配置参见 https://blog.csdn.net/huqiankunlol/article/details/88550230 ,这里主要配置已经完成,接下来发布到你的ecs服务器测试即可
如果采用springcloub分布式,需要在服务消费者得到 xid ,服务提供者处绑定 xid
@RequestMapping("bumen")
@TxcTransaction(timeout = 1000 * 12)
public String getbumen(String name){
String xid = TxcContext.getCurrentXid();
System.out.println("xid:"+xid);
//调用 Remote 远程服务
String str=bumenRemote.getlistAll(xid);
userinfoMapper.updateMoney();
return "hello 这是是服务调用返回的:"+str;
}
在服务提供者处,绑定xid
@RequestMapping("bumen/getlistAll")
public String getlist(String xid){
try{
TxcContext.bind(xid, null);
System.out.println("xid:"+xid);
bumenMapper.updateMoney();
// System.out.println(1/0);
}finally {
TxcContext.unbind();
}
return "成功";
}
分布式事物阿里官方demo下载地址:http://txc-console.oss-cn-beijing.aliyuncs.com/example/txc-yun-sample.zip?spm=a2c4g.11186623.2.14.79121cbeJqu1yD&file=txc-yun-sample.zip