TXC for EDAS 樣例工程__TXC for EDAS_二方服務_企業級分布式應用服務 EDAS-阿裏雲
樣例工程下載地址:
樣例工程內容說明:
將壓縮包解壓後包括4個 Maven 工程。
- sample-txc-simple:最簡的 TXC 樣例工程,該工程給出了一個最少依賴的 TXC 案例,TXC 使用入門必看。
- sample-txc-edas:在 EDAS 上使用 TXC 的案例,該案例綜合了 TXC、EDAS 及 MQ 的使用,通過 Console 和 Web 兩種方式充分展現了用戶的使用場景,是 EDAS 上部署 TXC 的進階案例,該案例可以讓用戶對 TXC 使用場景有更全麵的理解。
- sample-txc-mq:最簡 TXC 樣例的基礎上增加了 MQ 的使用,將 MQ 也包含進了分布式事務,保證了數據庫操作與消息發送的分布式事務,數據庫操作提交,則消息一定發送成功;數據庫操作回滾,則消息一定不會被發送出去。本案例是 TXC 和 MQ 綜合實踐的入門案例。
- sample-mq-consumer:該工程主要為上述案例中的 MQ 消息 Provider 提供一個 Consumer 案例,該工程不依賴 TXC,僅為方便用戶理解 MQ 案例。
sample-txc-simple 樣例工程
業務邏輯說明
本案例的業務邏輯是 A 轉賬給 B 10次,前五次成功,後五次失敗,其中 A 和 B 分別位於兩個 MySQL 數據庫中,使用 TXC 事務保證了 A 和 B 錢的總數始終不變。
案例搭建方法
從 EDAS 控製台申請事務分組。
需要兩台 RDS,一台 ECS 用於部署本應用。
在兩個 RDS 實例中分別執行 txc_sample1.sql 和 txc_sample2.sql 完成建表。
把該工程拷貝到 ECS 服務器上,找到 sample-txc-simple/src/main/resources 目錄下的 txc-client-context.xml 文件,對該文件中的兩個數據源進行修改,分別替換為兩個 RDS 的數據源。再將該文件中
的xxxxx替換為在(1)中申請的TXC組id。 將 AccessKey 和 SecretKey 替換成本用戶自己的 AK/SK。 AccessKey 為阿裏雲賬戶的 AK,SecretKey 為阿裏雲賬戶的 SK,可以在阿裏雲用戶中心查詢。
在 sample-txc-simple 目錄下執行 build.sh 編譯本工程。編譯完成後在 sample-txc-simple/client/bin 目錄下執行 run.sh 可以看到運行結果。
Java 源代碼在 /sample-txc-simple/src/main/java/com/taobao/txc/tests 目錄下,可以根據業務需求修改。
sample-txc-mq 樣例工程
業務邏輯說明
本案例和 sample-txc-simple 案例類似,業務邏輯是 A 轉賬給 B 10次,前五次成功,後五次失敗。和 sample-txc-simple 案例不同的是,在 A 轉賬給 B 成功後,增加了 MQ 的一個通知,告知轉賬成功。使用 TXC 事務保證了 A 和 B 錢的總數始終不變,同時保證了隻有轉賬成功的情況下 MQ 通知才可見。
案例搭建方法
需要兩台 RDS,一台 ECS 用於部署本應用。
在兩個 RDS 實例中分別執行 txc_sample1.sql 和 txc_sample2.sql 完成建表。
把該工程拷貝到 ECS 服務器上,找到 sample-txc-mq/src/main/resources 目錄下的 txc-mq-client-context.xml 文件,對該文件中的兩個數據源進行修改,分別替換為兩個 RDS 的數據源。再將該文件中
的xxxxx替換為在(1)中申請的 TXC 組 ID。再將自己申請的 MQ 相關信息配置到該文件中,即將 下的 MQ 配置替換為自己的 MQ 配置。 並且將 AccessKey 和 SecretKey 替換成本用戶自己的 AK/SK。 AccessKey 為阿裏雲賬戶的 AK,SecretKey 為阿裏雲賬戶的 SK,可以在阿裏雲用戶中心查詢。 在 sample-txc-mq 目錄下執行 build.sh 編譯本工程。編譯完成後在 sample-txc-mq/client/bin 目錄下執行 run.sh 可以看到 MQ 的 Provider 運行結果。
將 sample-mq-consumer 工程拷貝到 ECS 服務器中,在 sample-mq-consumer/src/main/java/com/taobao/txc/tests 中找到 SMSListener.java,修改其中 MQ 配置為申請的 MQ 配置。在 sample-mq-consumer 目錄下執行 build.sh 編譯該工程,編譯完成後在 sample-mq-consumer/client/bin 目錄下執行 run.sh 可以消費掉剛剛 sample-txc-mq 工程生產出來的 MQ 消息。
sample-txc-mq 工程的 Java 源代碼在 /sample-txc-mq/src/main/java/com/taobao/txc/tests 目錄下,可以根據業務需求修改。
TXC+MQ 使用說明
在部署 MQ 下的 TXC 應用時,需要在代碼中配置 MQ 資源,包括 Producer ID、Consumer ID 和 AccessKeys,如下圖所示。如果您還沒有 MQ 資源,需要申請一個 MQ 資源,MQ 資源申請參考 MQ Quick Start。
MQ 的 Producer 工程的配置與使用。
首先,需要在配置文檔 XML 中配置好 MQ 資源,例如:
<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 id="mtBranchInterceptor" class="com.taobao.txc.resourcemanager.mt.MtBranchInterceptor"/>
<bean id="mtServicesClassList" class="org.springframework.beans.factory.config.ListFactoryBean">
<property name="sourceList">
<list>
<value>com.taobao.txc.rm.mq.TxcMQProducer</value>
</list>
</property>
</bean>
<bean id="txc_mq_producer" class="com.taobao.txc.rm.mq.TxcMQProducerImpl">
<constructor-arg name="ProducerId" value="PID_txc_mq_prod_test"/>
<constructor-arg name="AccessKey" value="XXX"/>
<constructor-arg name="SecretKey" value="XXX"/>
</bean>
然後,需要在代碼中啟動一個 MQ 資源,例如:
TxcMQProducer txcMQProducer = (TxcMQProducer) context.getBean("txc_mq_producer");
txcMQProducer.start();
System.out.println("Producer started!");
最後,要實現 MQ 事務,需要在 TXC 注解函數範圍內發用一個 MQ 消息,例如:
@TxcTransaction(appName = "myapp")
public void update(Connection connection1, Connection connection2) throws SQLException, MQClientException {
//數據源操作
update1(connection1);
update2(connection2);
//創建一個消息
Message msg = new Message(/*topic*/"txc_mq_test",
/*tag*/"onePay",
String.format("onePay message:successn").getBytes());
/* 發送一個消息,事務完成消息可見 */
SendResult sendResult = txcMQProducer.send(null, 0, msg);
}
MQ 的 Consumer 工程的配置與使用可以參考下麵這個例子實現:
Properties properties = new Properties();
properties.put(PropertyKeyConst.ConsumerId, "CID_txc_mq_prod_test");
properties.put(PropertyKeyConst.AccessKey, "XXX");
properties.put(PropertyKeyConst.SecretKey, "XXX");
Consumer consumer = ONSFactory.createConsumer(properties);
consumer.subscribe("txc_mq_test", "*", new MessageListener() {
@Override
public Action consume(Message message, ConsumeContext context) {
log.info(String.format("SMSListener got message:%s", message));
System.out.println(String.format("SMSListener got message:%s", message));
System.out.println(new String(message.getBody()));
return Action.CommitMessage;
}
});
consumer.start();
sample-txc-edas 樣例工程
業務邏輯說明
從 DecMoney 扣款,給 IncMoney 打款,IncMoney 打款服務中會根據 IncMoney 目前餘額更新用戶相應的 Level。業務為了模擬應用異常產生,故意先給 IncMoney 打款,然後從 DecMoney 扣款後檢查 DecMoney 餘額,如果為負值則拋出應用異常導致全局事務回滾。該業務的展現方式有兩種,分別是 Web 方式、Console 方式。此外,還有提供了一種帶有 MQ 操作的 Console 方式客戶端。
樣例工程內容說明
本樣例主要包含以下幾個子工程:
- txc-client-web: EDAS+TXC 的 MVC 客戶端
- MVC,用 Web 方式展現業務邏輯。
- txc-client-console: EDAS+TXC 的 Console 客戶端,用 Console 的方式展現業務邏輯。
- txc-client-mq: EDAS+TXC+MQ 的 Console 客戶端,用 Console 的方式展現綜合了 EDAS 和 MQ 的業務邏輯。
- txc-edas-api: DecMoney、 IncMoney 、UpdateStarLevel 服務接口定義。
- txc-level-service: UpdateStarLevel的 EDAS 服務端實現 war 應用。
- txc-money-service: IncMoney,DecMoney 的 EDAS 服務端實現 war 應用。
案例搭建方法
從 TXC 控製台申請事務分組,並申請一個 MQ 服務。
從 EDAS 控製台申請 EDAS 應用分組。
需要三台 ECS 用於部署 EDAS 服務。詳情請參見 EDAS Quick Start。需要按照 EDAS 要求安裝 EDAS Agent 服務。
說明:
因為樣例程序包含 DRDS 以及 RDS 的兩個測試用例,所以客戶可以根據需要申請 DRDS 或 RDS 服務。
使用 EDAS+DRDS 用例,需要建表:txc_sample_edas_drds.sql
使用 EDAS+RDS 用例,需要建表:txc_undo_log.sql、txc_sample_edas_rds.sql
對工程中所有的 RDS 和 DRDS 數據源、MQ 配置、TXC 組配置等進行相應修改。主要涉及的文件如下:
- sample-txc-edas/txc-money-service/src/main/resources/txc-datasource.xml
- sample-txc-edas/txc-level-service/src/main/resources/txc-datasource.xml
- sample-txc-edas/txc-client-web/src/main/resources/txc-2-client-drds.xml
- sample-txc-edas/txc-client-mq/src/main/resources/txc-2-client-rds.xml
- sample-txc-edas/txc-client-console/src/main/resources/txc-2-client-rds.xml
在 sample-txc-edas 目錄下執行 build.sh 完成工程編譯。通過 EDAS 控製台上傳並啟動下麵三個 war。
- sample-txc-edas/txc-level-service/target/txc-level-service.war
- sample-txc-edas/txc-money-service/target/txc-money-service.war
- sample-txc-edas/txc-client-web/target/txc-client-web.war
使用 WebService 方式驗證部署結果。
- 訪問 txc-client-web 客戶端應用的地址:https://ip:8080/txc-client-web/client
- 首先顯示的是 inc_money,dec_money,level 三個表的當前值。
- 通過 reset 可以重置 dec_money 的初始值並清空 inc_money 和 level 表的值。
- 輸入每次轉款的金額數測試成功的全局事務和餘額不足產生異常並回滾的全局事務。
使用txc-client-console 子工程的 Console 方式驗證服務部署結果。
- 將 sample-txc-edas 整個工程拷貝到 ECS 服務器上,按步驟(4)修改參數配置,然後在 sample-txc-edas 目錄下執行 build.sh 完成工程編譯。
- 設置運行時環境變量,將下麵的xxxx替換為自己的配置,可以谘詢 EDAS 管理人員。
配代碼如下
export JAVA_OPTS="-Dproject.name=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx -Dtenant.id=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx -Dspas.identity=/home/admin/.spas_key/default -Daddress.server.domain=xxxx -Daddress.server.port=xxxx -Dconfigserver.client.port=xxxx -DJM.LOG.RETAIN.COUNT=7 -DJM.LOG.FILE.SIZE=300MB"
在 sample-txc-edas/txc-client-console/client/bin 目錄下執行 run.sh,可以看到執行結果。
使用 txc-client-mq 子工程的 Console 方式驗證綜合了 MQ 業務的服務部署結果。
- 將 sample-txc-edas 整個工程拷貝到 ECS 服務器上,按步驟(4)修改參數配置,然後在 sample-txc-edas 目錄下執行 build.sh 完成工程編譯。
- 設置運行時環境變量,將下麵的xxxx替換為自己的配置,可以谘詢 EDAS 管理人員詢問。
配代碼如下:
export JAVA_OPTS="-Dproject.name=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx -Dtenant.id=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx -Dspas.identity=/home/admin/.spas_key/default -Daddress.server.domain=xxxx -Daddress.server.port=xxxx -Dconfigserver.client.port=xxxx -DJM.LOG.RETAIN.COUNT=7 -DJM.LOG.FILE.SIZE=300MB"
在 sample-txc-edas/txc-client-mq/client/bin目錄下執行run.sh,可以看到 MQ 的 Provider 執行結果。
將 sample-mq-consumer 工程拷貝到 ECS 服務器中,在 sample-mq-consumer/src/main/java/com/taobao/txc/tests 中找到 SMSListener.java,修改其中的xxxxx為申請的 MQ 配置。在 sample-mq-consumer 目錄下執行 build.sh 編譯該工程,編譯完成後在 sample-mq-consumer/client/bin 目錄下執行 run.sh 可以 Consumer 掉剛剛 sample-txc-edas/txc-client-mq 工程生產出來的 MQ 消息。
最後更新:2016-12-07 10:28:54
上一篇:
TXC for EDAS 快速入門__TXC for EDAS_二方服務_企業級分布式應用服務 EDAS-阿裏雲
下一篇:
TXC SDK for EDAS__TXC for EDAS_二方服務_企業級分布式應用服務 EDAS-阿裏雲
後端簽名密鑰說明文檔__使用手冊(開放API)_API 網關-阿裏雲
快速開始__雲渲染管理係統_行業解決方案_批量計算-阿裏雲
自定義權限__授權管理_阿裏雲物聯網套件-阿裏雲
更新媒體-發布狀態__媒體接口_API使用手冊_視頻點播-阿裏雲
大數據早報:阿裏雲與中科院宣布合作發布量子計算雲平台 10.12
PublicIpAddressSetType__數據類型_API 參考_雲服務器 ECS-阿裏雲
刪除自定義路由__路由表相關接口_API 參考_雲服務器 ECS-阿裏雲
基於MaxCompute的大數據計算__典型應用_用戶指南_雲數據庫 RDS 版-阿裏雲
雲服務器 ECS Linux SSH 連接交互過程簡介__遠程登錄 (SSH)_Linux操作運維問題_雲服務器 ECS-阿裏雲
log4j-appender__loghub-采集_用戶指南_日誌服務-阿裏雲
相關內容
常見錯誤說明__附錄_大數據計算服務-阿裏雲
發送短信接口__API使用手冊_短信服務-阿裏雲
接口文檔__Android_安全組件教程_移動安全-阿裏雲
運營商錯誤碼(聯通)__常見問題_短信服務-阿裏雲
設置短信模板__使用手冊_短信服務-阿裏雲
OSS 權限問題及排查__常見錯誤及排除_最佳實踐_對象存儲 OSS-阿裏雲
消息通知__操作指南_批量計算-阿裏雲
設備端快速接入(MQTT)__快速開始_阿裏雲物聯網套件-阿裏雲
查詢API調用流量數據__API管理相關接口_API_API 網關-阿裏雲
使用STS訪問__JavaScript-SDK_SDK 參考_對象存儲 OSS-阿裏雲