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-阿裏雲