整合Seata之前要先安裝好Seata的服務端 可以參考上一章
從Seata的開源地址當中下載相關的案例代碼,地址如下:
- 選擇自己熟悉的框架和案例代碼,創建一個Maven 父工具,導入代碼到IDEA工具當中,具體的代碼結構圖如下:
- 修改各個核心鏈路下的各個微服務的file.conf和register.conf文件,和搭的Seata服務端的配置一致,我的配置文件修改如下:
register.conf的配置文件如下:
pom.xml文件
<dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
</dependency>
<!--mybatis-->
<!-- <dependency>-->
<!-- <groupId>org.mybatis.spring.boot</groupId>-->
<!-- <artifactId>mybatis-spring-boot-starter</artifactId>-->
<!-- <version>${mybatis-spring-boot-starter.version}</version>-->
<!-- </dependency>-->
<!--mysql-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.version}</version>
</dependency>
<!--druid-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>${druid.version}</version>
</dependency>
<!--lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
</dependency>
<!--seata-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-seata</artifactId>
<version>2.1.0.RELEASE</version>
<exclusions>
<exclusion>
<artifactId>seata-all</artifactId>
<groupId>io.seata</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>io.seata</groupId>
<artifactId>seata-all</artifactId>
<version>${seata.version}</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>${fastjson.version}</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>${mybatisplus.version}</version>
<exclusions>
<exclusion>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>${commons.lang.version}</version>
</dependency>
</dependencies>
啓動應該程序
先啓動服務註冊中心(eureka)->再啓動Seata服務->訂單服務->庫存服務->賬號服務
說明:
1.依賴spring-cloud-alibaba-seata,內部集成了seata,並實現了xid傳遞
2.數據源代理,如果你的Seata的版本在0.9.0之後,那麼數據源代理有二種配置方式
方式一:
1.0.0: client.support.spring.datasource.autoproxy=true
0.9.0: support.spring.datasource.autoproxy=true
方式二:
@Bean
@ConfigurationProperties(prefix = "spring.datasource")
public DataSource druidDataSource() {
DruidDataSource druidDataSource = new DruidDataSource();
return druidDataSource;
}
@Primary
@Bean("dataSource")
public DataSourceProxy dataSource(DataSource druidDataSource) {
return new DataSourceProxy(druidDataSource);
}
3.初始化GlobalTransactionScanner
- 手動
public GlobalTransactionScanner globalTransactionScanner() {
String applicationName = this.applicationContext.getEnvironment().getProperty("spring.application.name");
String txServiceGroup = this.seataProperties.getTxServiceGroup();
if (StringUtils.isEmpty(txServiceGroup)) {
txServiceGroup = applicationName + "-fescar-service-group";
this.seataProperties.setTxServiceGroup(txServiceGroup);
}
return new GlobalTransactionScanner(applicationName, txServiceGroup);
}
* 自動(提供的項目就是通過引入了spring-cloud-alibaba-seata.jar)
+ 引入seata-spring-boot-starter、spring-cloud-alibaba-seata等jar
4.實現xid跨服務傳遞
- 手動 參考源碼integration文件夾下的各種rpc實現 module
- 自動 springCloud用戶可以引入spring-cloud-alibaba-seata,內部已經實現xid傳遞
5.事務分組
事務分組可以作爲資源的邏輯隔離單位,去註冊中心獲得相應的TC服務列表。
seata註冊、配置中心分爲兩類,內置file、第三方註冊(配置)中心如nacos等等,註冊中心和配置中心之間沒有約束,可各自使用不同類型。
6. file註冊中心和配置中心
- 讀取配置
通過FileConfiguration本地加載file.conf的配置參數
7.獲取事務分組
spring配置,springboot可配置在yml、properties中,服務啓動時加載配置,對應的值"my_test_tx_group"即爲一個事務分組名,若不配置,默認獲取屬性spring.application.name的值+"-fescar-service-group"
8.查找TC集羣名
拿到事務分組名"my_test_tx_group"拼接成"service.vgroup_mapping.my_test_tx_group"查找TC集羣名clusterName爲"default"
9.查詢TC服務
拼接"service."+clusterName+".grouplist"找到真實TC服務地址127.0.0.1:8091
具體的客戶端在啓動過程當中做了哪些操作,後面再補充