生活随笔
收集整理的這篇文章主要介紹了
Spring Cloud 中 分布式事务解决方案 -- 阿里GTS的使用
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1:依賴引入
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.1.3</version> </dependency> <dependency> <groupId>com.taobao.txc</groupId> <artifactId>txc-client</artifactId> <version>${txc.version}</version> <scope>system</scope> <systemPath>${project.basedir}/../../../../lib/txc-client-2.0.69.jar</systemPath> </dependency> <dependency> <groupId>com.alibaba.dauth</groupId> <artifactId>sdk-client</artifactId> <version>1.2.3</version> </dependency> <dependency> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> <version>1.1.1</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.6.4</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>
2:配置相關
<bean id="dataSource" class="com.taobao.txc.datasource.cobar.TxcDataSource"> <property name="url" value="${jdbc.url}"/> <property name="username" value="${jdbc.username}"/> <property name="password"> <value><![CDATA[${jdbc.password}]]></value> </property> <property name="driverClassName" value="${jdbc.driverClassName}"/> </bean> <bean class="com.taobao.txc.client.aop.TxcTransactionScaner"> <constructor-arg value="myapp"/> <constructor-arg value="dXXXXXXXXXXX"/> <constructor-arg value="1"/> <constructor-arg value="https://test-cs-gts.aliyuncs.com"/> </bean>
3:注意事項
- 啟動類將第二步的配置文件引入?@ImportResource({"classpath:META-INF/applicationContext.xml"})
- 微服務中所有的模塊都需要做第一步和第二步的操作,并注意scaner設置的應用名應唯一
- 第二步的配置文件中的scaner只適用于本地化開發,線上修改如下
- <bean class="com.taobao.txc.client.aop.TxcTransactionScaner">
- <constructor-arg value="myapp"/>
- <constructor-arg value="xxxxxxxx"/>
- <constructor-arg value="1"/>
- <property name="accessKey" value="xxx"/>
- <property name="secretKey" value="xxx"/>
- </bean>
- 事務發起方業務處理類添加注解 @TxcTransaction(timeout = 1000 * 6) timeout默認為6000,為事務超時時間。
[java]?view plaincopy
<code?class="language-java">????@TxcTransaction(timeout?=?1000?*?6)??????public?Map<String,?String>?getMoney(String?id)?{??????????String?xid?=?TxcContext.getCurrentXid();??????????TxcContext.bind(xid,null);??????????logger.info("查詢service?:?"?+?xid);??????????Map<String,?String>?map?=?new?HashMap<>();??????????map.put("one",?feignHelloService.getOne(id,?xid));??????????map.put("two",?feignHelloService2.getOne(id,?xid));??????????TxcContext.unbind();??????????return?map;??????}</code>??
注意代碼中我們獲取了TXC中的事務ID - >?xid??,這個xid需要延服務鏈路傳遞到服務下游,這樣下游的事務就按照最外層事務發起方的事務走。注意bind & unbind?兩個方法,是為我們的事務和阿里GTS-SERVER的綁定操作,業務下游得到xid之后同樣需要進行同樣的綁定操作。若項目采用阿里EDAS分布式服務框架,xid的綁定操作無須編碼,edas會自己傳遞。
- 本地啟用GTS事務分組需阿里技術人員將分組分配到公網,因為GTS默認只支持經典網絡類型的ECS。或直接采用阿里內部公網事務分組?txc_test_public.1129361738553704.QD??免費版GTS在啟用服務時,會有不穩定問題 ,一般待服務啟動一段時間就不會出現事務鏈接超時的異常。
jar包下載地址
總結
以上是生活随笔為你收集整理的Spring Cloud 中 分布式事务解决方案 -- 阿里GTS的使用的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。