Spring Cloud 中 分布式事務解決方案 -- 阿里GTS的使用

1:依賴引入

  1. <!--gts相關-->
  2. <!--數據庫連接-->
  3. <dependency>
  4. <groupId>org.springframework.boot</groupId>
  5. <artifactId>spring-boot-starter-jdbc</artifactId>
  6. </dependency>
  7. <dependency>
  8. <groupId>mysql</groupId>
  9. <artifactId>mysql-connector-java</artifactId>
  10. </dependency>
  11. <!--阿里druid數據庫鏈接依賴-->
  12. <dependency>
  13. <groupId>com.alibaba</groupId>
  14. <artifactId>druid</artifactId>
  15. <version>1.1.3</version>
  16. </dependency>
  17. <dependency>
  18. <groupId>com.taobao.txc</groupId>
  19. <artifactId>txc-client</artifactId>
  20. <version>${txc.version}</version>
  21. <scope>system</scope>
  22. <systemPath>${project.basedir}/../../../../lib/txc-client-2.0.69.jar</systemPath>
  23. </dependency>
  24. <dependency>
  25. <groupId>com.alibaba.dauth</groupId>
  26. <artifactId>sdk-client</artifactId>
  27. <version>1.2.3</version>
  28. </dependency>
  29. <!-- OTHERS -->
  30. <dependency>
  31. <groupId>commons-logging</groupId>
  32. <artifactId>commons-logging</artifactId>
  33. <version>1.1.1</version>
  34. </dependency>
  35. <dependency>
  36. <groupId>org.slf4j</groupId>
  37. <artifactId>slf4j-log4j12</artifactId>
  38. <version>1.6.4</version>
  39. </dependency>
  40. <dependency>
  41. <groupId>io.netty</groupId>
  42. <artifactId>netty-all</artifactId>
  43. <version>4.1.0.Final</version>
  44. </dependency>
  45. <dependency>
  46. <groupId>com.taobao.middleware</groupId>
  47. <artifactId>logger.api</artifactId>
  48. <version>0.1.5</version>
  49. </dependency>
  50. <dependency>
  51. <groupId>com.taobao.diamond</groupId>
  52. <artifactId>diamond-client</artifactId>
  53. <version>edas-3.7.3</version>
  54. </dependency>
  55. <dependency>
  56. <groupId>ch.qos.logback</groupId>
  57. <artifactId>logback-core</artifactId>
  58. <version>1.1.7</version>
  59. </dependency>

2:配置相關

  1. <bean id="dataSource" class="com.taobao.txc.datasource.cobar.TxcDataSource">
  2. <property name="url" value="${jdbc.url}"/>
  3. <property name="username" value="${jdbc.username}"/>
  4. <property name="password">
  5. <value><![CDATA[${jdbc.password}]]></value>
  6. </property>
  7. <property name="driverClassName" value="${jdbc.driverClassName}"/>
  8. </bean>
  9. <!-- 定義聲明式事務,要想讓事務annotation感知的話,要在這里定義一下,spring才能感知到 -->
  10. <!--<property name="accessKey" value="xxx"/>-->
  11. <!--<property name="secretKey" value="xxx"/>-->
  12. <bean class="com.taobao.txc.client.aop.TxcTransactionScaner">
  13. <constructor-arg value="myapp"/><!-- 應用名,用戶自定義 -->
  14. <constructor-arg value="dXXXXXXXXXXX"/><!-- 事務分組名 -->
  15. <constructor-arg value="1"/>
  16. <constructor-arg value="https://test-cs-gts.aliyuncs.com"/>
  17. </bean>

3:注意事項

  • 啟動類將第二步的配置文件引入?
    @ImportResource({"classpath:META-INF/applicationContext.xml"})
  • 微服務中所有的模塊都需要做第一步和第二步的操作,并注意scaner設置的應用名應唯一
  • 第二步的配置文件中的scaner只適用于本地化開發,線上修改如下
    1. <bean class="com.taobao.txc.client.aop.TxcTransactionScaner">
    2. <constructor-arg value="myapp"/><!-- 應用名,用戶自定義 -->
    3. <constructor-arg value="xxxxxxxx"/><!-- 事務分組名 -->
    4. <constructor-arg value="1"/>
    5. <property name="accessKey" value="xxx"/>
    6. <property name="secretKey" value="xxx"/>
    7. </bean>

  • 事務發起方業務處理類添加注解 
    @TxcTransaction(timeout = 1000 * 6) timeout默認為6000,為事務超時時間。
[java]?view plaincopy
  1. <code?class="language-java">????@TxcTransaction(timeout?=?1000?*?6)??
  2. ????public?Map<String,?String>?getMoney(String?id)?{??
  3. ????????String?xid?=?TxcContext.getCurrentXid();??
  4. ????????TxcContext.bind(xid,null);??
  5. ????????logger.info("查詢service?:?"?+?xid);??
  6. ????????Map<String,?String>?map?=?new?HashMap<>();??
  7. ????????map.put("one",?feignHelloService.getOne(id,?xid));??
  8. ????????map.put("two",?feignHelloService2.getOne(id,?xid));??
  9. ????????TxcContext.unbind();??
  10. ????????return?map;??
  11. ????}</code>??

注意代碼中我們獲取了TXC中的事務ID - >?xid??,這個xid需要延服務鏈路傳遞到服務下游,這樣下游的事務就按照最外層事務發起方的事務走。注意bind & unbind?兩個方法,是為我們的事務和阿里GTS-SERVER的綁定操作,業務下游得到xid之后同樣需要進行同樣的綁定操作。若項目采用阿里EDAS分布式服務框架,xid的綁定操作無須編碼,edas會自己傳遞。

  • 本地啟用GTS事務分組需阿里技術人員將分組分配到公網,因為GTS默認只支持經典網絡類型的ECS。或直接采用阿里內部公網事務分組?txc_test_public.1129361738553704.QD??免費版GTS在啟用服務時,會有不穩定問題 ,一般待服務啟動一段時間就不會出現事務鏈接超時的異常。

jar包下載地址


本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/387071.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/387071.shtml
英文地址,請注明出處:http://en.pswp.cn/news/387071.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

《HTTP 權威指南》筆記:第十五章 實體與編碼

&#xfffc; 如果把 「HTTP 報文」想象為因特網貨運系統的「箱子」,那么「HTTP 實體」就是報文中的實際的「貨物」. 其中,實體又包含了「實體首部」 和 「實體主體」,實體首部用于描述各種參數,實體主體就是原始貨物. 常見的實體首部 實體的大小: Content-Length 定義: 報文的…

Spring Cloud Sleuth進階實戰

為什么需要Spring Cloud Sleuth 微服務架構是一個分布式架構&#xff0c;它按業務劃分服務單元&#xff0c;一個分布式系統往往有很多個服務單元。由于服務單元數量眾多&#xff0c;業務的復雜性&#xff0c;如果出現了錯誤和異常&#xff0c;很難去定位。主要體現在&#xff…

Element表格嵌入復選框以及單選框

1&#xff0c;element 表格嵌入CheckBox 效果圖如下&#xff1a; 2&#xff0c;element結合checkBox實現單選效果如下&#xff1a; html代碼&#xff1a; <template><div><p>shopInfo</p><el-tableref"multipleTable":data"tableDat…

溫故之 “插入排序”

概念&#xff1a;將一個數據插入已經排好序的有序數組中&#xff0c;從而得到一個新的多一個數據的有序數組。 概念理解~~ 將要排序的是一個亂的數組int[] arrays {3, 2, 1, 3, 3}; 在未知道數組元素的情況下&#xff0c;我們只能把數組的第一個元素作為已經排好序的有序數據&…

實驗二3

#include "stdafx.h" #include "stdio.h" int main(int argc, char* argv[]) {int a,b,c; scanf("%d %d %d",&a,&b,&c);if(ab&&bc) printf("等邊三角形");else if((ab&&b!c)||(ac&&c!b)||(bc&a…

webpack來打包你的vue項目,如發現你的vendor.js過大

1.如果你使用了webpack來打包你的vue項目&#xff0c;如發現你的vendor.js過大則可以參考本文的解決方案. 2.造成過大的原因是因為在main.js導入第三庫太多時,webpack合并js時生成了vendor.js(我們習慣把第三方庫放在vendor里面)造成的.如下圖在main.js引用element-ui等第三方…

TF01 簡介

總覽 如何從實體中提取特征&#xff0c;對于很多傳統機器學習算法的性能有巨大影響。 一旦解決了數據表達和特征提取&#xff0c;很多人工智能任務也就解決了90%。 對許多機器學習算法來說&#xff0c;特征提取不是一件簡單的事情。 深度學習解決的核心問題之一就是自動的將簡…

K8s基本概念入門

序言 沒等到風來&#xff0c;綿綿小雨&#xff0c;所以寫個隨筆&#xff0c;聊聊k8s的基本概念。 k8s是一個編排容器的工具&#xff0c;其實也是管理應用的全生命周期的一個工具&#xff0c;從創建應用&#xff0c;應用的部署&#xff0c;應用提供服務&#xff0c;擴容縮容應用…

idea出現找不到實體類

今天經理遇到一個很奇怪的問題&#xff1a; 在使用idea時&#xff0c;就是包真實存在&#xff0c;但是包中的實體類卻無法智能提示&#xff0c;也無法導入成功&#xff1b; 我推薦的解決辦法是重新導入&#xff0c;但是沒有用&#xff0c;經理在網上找了很多解決方式&#xff0…

TF02 入門

計算模型——圖 數據模型——張量 運行模型——會話 TensorFlow計算模型——計算圖 計算圖是TF中最基本的一個概念&#xff0c;TF中的所有計算都會被轉化為計算圖上的結點。 TF是一個通過計算圖的形式來表述計算的編程系統。TF中的每一個計算都是計算圖上的一個節點&#x…

ElasticSearch、Logstash和Kiabana三個開源工具。

一 方案背景 通常&#xff0c;日志被分散的儲存不同的設備上。如果你管理數十上百臺服務器&#xff0c;你還在使用依次登錄每臺機器的傳統方法查閱日志。這樣是不是感覺很繁瑣和效率低下。開源實時日志分析ELK平臺能夠完美的解決日志收集和日志檢索、分析的問題&#xff0c;ELK…

「一本通 6.4 例 4」曹沖養豬(CRT)

復習一下 擴展中國剩余定理 首先考慮兩個同余方程\[ x \equiv a_1\; mod\; m_1\\ x \equiv a_2\; mod\; m_2 \]化成另一個形式\[ x n_1 * m_1 a_1\\ x n_2 * m_2 a_2 \] 聯立可得\[ n_1 * m_1 a_1 n_2 * m_2 a_2\\ n_1 * m_1 - n_2 * m_2 a_2 - a_1 \]有解的前提是\[ \…

06 MapReduce工作機制

MapReduce作業的執行流程 1、提交作業 在提交JobConf對象之後&#xff0c;用戶程序調用JobClient的runJob方法。 runJob方法會先行調用JobSubmissionProtocol接口所定義的submitJob方法&#xff0c;並將作業提交給JobTracker。 緊接著&#xff0c;runJob不斷循環&#xff0…

solr elasticsearch比較

solr&#xff1a; 優點 1、Solr有一個更大、更成熟的用戶、開發和貢獻者社區。 2、支持添加多種格式的索引&#xff0c;如&#xff1a;HTML、PDF、微軟 Office 系列軟件格式以及 JSON、XML、CSV 等純文本格式。 3、Solr比較成熟、穩定。 4、不考慮建索引的同時進行搜索&#xf…

力扣(LeetCode)292. Nim游戲 巴什博奕

你和你的朋友&#xff0c;兩個人一起玩 Nim游戲&#xff1a;桌子上有一堆石頭&#xff0c;每次你們輪流拿掉 1 - 3 塊石頭。 拿掉最后一塊石頭的人就是獲勝者。你作為先手。 你們是聰明人&#xff0c;每一步都是最優解。 編寫一個函數&#xff0c;來判斷你是否可以在給定石頭數…

Spring Cloud應用監控與管理Actuator

由于我們把一個復雜高耦合的單體系統拆分成了多個小型服務&#xff0c;所以部署應用的數量在不斷增長&#xff0c;造成維護復雜度大大提升。所以我們需要一套自動化的監控運維機制&#xff0c;這套運維機制可以不間斷的獲取每個服務應用的各種指標&#xff0c;并根據這些指標信…

2019.04.09 電商25 結算功能1

結算功能要獲取很多數據&#xff0c; 現在的主要問題是要知道獲取對應的商品信息&#xff0c;要知道我選的是哪個的商品信息啊 它們選框的類名都一樣啊&#xff0c;能遍歷嗎&#xff1f;遍歷之后要去獲取&#xff0c;它父級屬性的值 有多少商品就有多少復選框&#xff0c;可以獲…