950
微信
TXC SDK for EDAS__TXC for EDAS_二方服务_企业级分布式应用服务 EDAS-阿里云
本文主要介绍 TXC SDK 的使用说明及注意事项。
TXC SDK for EDAS 下载
下载 TXC SDK开发包,并添加到 EDAS 客户端和服务器端的 pom.xml 依赖中。
<dependency>
<groupId>com.taobao.txc</groupId>
<artifactId>txc-client</artifactId>
<version>2.0.23</version>
</dependency>
TXC SDK for EDAS 使用说明
首先,Spring 配置文件中配置好 com.taobao.txc.client.aop.TxcTransactionScaner,如:
<bean class="com.taobao.txc.client.aop.TxcTransactionScaner">
<constructor-arg value="test111.1325460969176422.BJ"/>
<accessKey>xxx</accessKey>
<secretKey>xxx</secretKey>
</bean>
<bean id="bussiness" class="com.taobao.txc.tests.BussinessImpl" init-method="init">
</bean>
业务代码中在需要发起全局事务的 Bean 中添加 @TxcTransaction 注解,简单举例,如:
class BussinessImpl { /* 此为声明的带有@TxcTransaction注解方法的bean */
@TxcTransaction(timeout = 60000)
void edasSample(HsfService hsf) {
// 调用远端服务
boolean ret = hsf.runBusiness();
if(ret == false)
throw new TxcExecption;
}
}
一旦有异常被抛出这个注解函数的范围,表示客户端期望事务回滚,则凡是参与这个全局事务的资源都会在 TXC 的指导下自动进行全局回滚。如果没有在指定全局事务超时时间内提交这个事务,也会导致整个全局事务的回滚。
说明:
带有 @TxcTransaction 注解的方法可以在其他的类中被调用,但如果在本类的其他方法中被调用的时候需要显示指定实例。例如:class A 有 @TxcTransaction 注解的方法 tran_func 和不带注解的 no_tran_func,客户可以在 class B 中的一般方法中调用 a.tran_func。但不应该在 no_tran_func 中直接调用 tran_func,否则事务无法正常开启。
开启事务只能直接调用带有 @TxcTransaction 注解的 Bean 的注解方法。例如:上面例子中 bussiness 的 Bean,应调用 bussiness.edasSample(…) 开启事务。
使用 DRDS 作为数据源时,需要客户发送 DRDS 开通 TXC 的申请的文档,文档包括 DRDS 数据实例名称,数据库名称等信息,DRDS 接入分布式事务(TXC)须知 - 模板 下载。同时需要咨询 DRDS 人员关于此专享实例的版本信息是否支持 TXC 要求,如果 DRDS 实例版本较低需要申请 DRDS 实例版本进行升级。
同一台机器上只允许一个 TXC 客户端运行。
在 TXC 中使用 MQ 时,com.taobao.txc.client.aop.MTRelationShipManager 一定要先于 com.taobao.txc.client.aop.TxcTransactionScaner 进行声明。
<bean class="com.taobao.txc.client.aop.MTRelationShipManager">
<property name="beanNames" ref="mtServicesClassList" />
<property name="interceptorNames">
<list>
<value>mtBranchInterceptor</value>
</list>
</property>
<property name="order" value="1"></property>
<property name="proxyTargetClass" value="false">
</property>
</bean>
<bean class="com.taobao.txc.client.aop.TxcTransactionScaner">
<constructor-arg value="test111.1325460969176422.BJ"/>
<constructor-arg value="3"/>
<accessKey>xxx</accessKey>
<secretKey>xxx</secretKey>
</bean>
EDAS 服务使用 TXC 访问 DRDS 数据库要求 EDAS 容器版本>=2.8.2,否则需要点击 EDAS 容器的升级功能进行升级。
TXC EDAS for RDS 使用注意事项
使用 EDS+RDS(MySQL) 时需要使用 TXC 提供的数据源包,才能自动打通分布式事务。
<bean id="DataSource_rds" class="com.taobao.txc.datasource.cobar.TxcDataSource">
<property name="url" value="jdbc:mysql://rds-ip:3306/xxx" />
<property name="username" value="xxx" />
<property name="password" value="xxx" />
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
</bean>
如果 EDAS 调用的是 DRDS 的数据源,服务端可以使用标准 MySQL jdbc 或者 druid 连接池等方式,如:
<bean id="DataSource_drds" class="com.alibaba.druid.pool.DruidDataSource" init-method="init">
<property name="url" value="jdbc:mysql://drds-ip/xxx"/>
<property name="username" value="xxx"/>
<property name="connectProperties">
<props>
<prop key="password">xxx</prop>
</props>
</property>
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="filters" value="stat" />
<property name="maxActive" value="300" />
<property name="initialSize" value="10" />
<property name="maxWait" value="60000" />
<property name="minIdle" value="1" />
<property name="timeBetweenEvictionRunsMillis" value="60000" />
<property name="minEvictableIdleTimeMillis" value="300000" />
<property name="validationQuery" value="SELECT 'x'" />
<property name="testWhileIdle" value="true" />
<property name="testOnBorrow" value="false" />
<property name="testOnReturn" value="false" />
<property name="poolPreparedStatements" value="true" />
<property name="maxPoolPreparedStatementPerConnectionSize" value="30" />
</bean>
其他使用方式
因为带有 @TxcTransaction 注解的方法声明为全局事务的边界,一旦有异常从这个方法抛出便会导致全局事务的回滚,所以遇到某些在全局事务中但不影响整个事务成功或失败的步骤需要忽略的情况时,客户可以在声明为全局事务的方法中将可忽略的步骤自己捕捉异常,这样即使某些操作失败了也不会影响整个全局事务的推进。
注意:客户使用时一定要明确某些步骤的操作对于整个事务是可忽略的,否则全局事务数据的状态将作为成功进行提交,且被忽略的操作结果部分将不能被提交。
关于 TXC 的使用也可以参考 TXC 最佳实践。
最后更新:2016-11-23 16:04:16
上一篇:
TXC for EDAS 样例工程__TXC for EDAS_二方服务_企业级分布式应用服务 EDAS-阿里云
下一篇:
定位及解决 HSF 问题__HSF 常见问题_开发常见问题_产品常见问题_企业级分布式应用服务 EDAS-阿里云
第三方推流工具常见问题__常见问题_产品常见问题_视频直播-阿里云
云邮集团版创建邮件域__控制台操作_产品使用问题_企业邮箱-阿里云
修改连接串__实例管理_API 参考_云数据库 RDS 版-阿里云
访问控制__Android SDK_SDK使用手册_消息服务-阿里云
Android SDK手册__SDK手册_HTTPDNS-阿里云
C SDK开发包__历史版本SDK下载_SDK 参考_对象存储 OSS-阿里云
删除API__API管理相关接口_API_API 网关-阿里云
比较运算符__运算符_SQL语法参考_云数据库 OceanBase-阿里云
解除策略与API绑定__流量控制相关接口_API_API 网关-阿里云
工具__Java_SDK使用手册_归档存储-阿里云
相关内容
常见错误说明__附录_大数据计算服务-阿里云
发送短信接口__API使用手册_短信服务-阿里云
接口文档__Android_安全组件教程_移动安全-阿里云
运营商错误码(联通)__常见问题_短信服务-阿里云
设置短信模板__使用手册_短信服务-阿里云
OSS 权限问题及排查__常见错误及排除_最佳实践_对象存储 OSS-阿里云
消息通知__操作指南_批量计算-阿里云
设备端快速接入(MQTT)__快速开始_阿里云物联网套件-阿里云
查询API调用流量数据__API管理相关接口_API_API 网关-阿里云
使用STS访问__JavaScript-SDK_SDK 参考_对象存储 OSS-阿里云