半工半搞的,同事用了0.8.0的,現在最新是1.1.0,自己沒配置成,週末繼續研究
實踐:
1.下載seata-server1.1.0 修改registry.con file.conf 指向consul 作爲服務註冊中心 數據庫做爲存儲事務的 用於回滾
2.配置spring clound服務
3.測試事務回滾問題
環境說明:
seata-server版本1.1.0 如果沒有可以去我的資源免費下載
spring clound使用的:Greenwich.SR2
sprint boot:2.1.8.RELEASE
spring-cloud-starter-consul-discovery:2.2.0.RELEASE
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-seata</artifactId>
<version>2.1.0.RELEASE</version>
<exclusions>
<exclusion>
<groupId>io.seata</groupId>
<artifactId>seata-all</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>io.seata</groupId>
<artifactId>seata-all</artifactId>
<version>1.1.0</version>
</dependency>
改了consul-api的版本 要不然會報監聽類找不到 大部分是需要最新的jar包
consol-api需要使用1.4.1
<dependency>
<groupId>com.ecwid.consul</groupId>
<artifactId>consul-api</artifactId>
<version>1.4.3</version>
</dependency>
seata-server 服務端的配置 目標使用consul註冊中心 將seata-server註冊上去
registry.conf 註冊配置
registry type改爲consul
type = "consul"
consul指向consul服務端 將會向服務端註冊一個服務 後續的客戶端程序也需要保持相同的配置
consul {
cluster = "seata-server"
serverAddr = "127.0.0.1:8500"
}
config 存儲的配置文件 默認還是指向file.conf 使用file的配置 客戶端程序也是需要
再將服務端的file.conf registry.conf複製到resources即可
file.conf修改 使用server中的file-example.conf將裏面的複製過去 修改內容
service:
vgroupMapping.事務分組名稱="自定義事務名稱"
自定義事務名稱.grouplist = "對應的consul服務ip+端口"
例如:
vgroupMapping.my_test_tx_group = "seata1"
#only support when registry.type=file, please don't set multiple addresses
seata1.grouplist = "127.0.0.1:8091"
store配置
修改mode="db"
前提是要配置好數據庫 需要將server需要的3個表放到數據庫 這裏配置連接到該數據庫上
如:
driverClassName = "com.mysql.jdbc.Driver"
url = "jdbc:mysql://127.0.0.1:3306/seata110"
user = "root"
password = "root"
其他不改
剩下的是spring clound服務的配置了
1.將seata-server的配置文件 複製到resource下 file.conf resource.conf
2.啓動類添加:@EnableAutoDataSourceProxy
3.
對應yml
spring: cloud:
consul: alibaba:
seata:
tx-service-group: my_test_tx_group
其他的就不用了 不用像0.8.0那樣修改datasource代理 還有增加fegin的id 還有globalTransaction id 這些都會加上去的
程序啓動日誌:
2020-03-29 15:59:05.896 INFO 13156 --- [ main] s.s.a.d.SeataDataSourceBeanPostProcessor : Auto proxy of [druidDataSource]
2020-03-29 15:59:05.957 INFO 13156 --- [ main] i.s.common.loader.EnhancedServiceLoader : load DbTypeParser[druid] extension by class[io.seata.sqlparser.druid.DruidDelegatingDbTypeParser]
2020-03-29 15:59:05.975 INFO 13156 --- [ main] i.s.common.loader.EnhancedServiceLoader : load RegistryProvider[Consul] extension by class[io.seata.discovery.registry.consul.ConsulRegistryProvider]
2020-03-29 15:59:06.392 INFO 13156 --- [ main] i.s.c.r.netty.NettyClientChannelManager : will connect to 192.168.56.1:8091
2020-03-29 15:59:06.393 INFO 13156 --- [ main] io.seata.core.rpc.netty.RmRpcClient : RM will register :jdbc:mysql://47.112.130.230:3306/kitty_test
2020-03-29 15:59:06.398 INFO 13156 --- [ main] i.s.core.rpc.netty.NettyPoolableFactory : NettyPool create channel to transactionRole:RMROLE,address:192.168.56.1:8091,msg:< RegisterRMRequest{resourceIds='jdbc:mysql://192.168.56.1:3306/test', applicationId='jy-user', transactionServiceGroup='my_test_tx_group'} >
Auto proxy of druidDataSource-->RegistryProvider consul-->RM will register-->transactionRole:-->
register RM success
NettyPool create channel to transactionRole:TMROLE,address:192.168.56.1:8091,msg:
< RegisterTMRequest{applicationId='jy-user', transactionServiceGroup='my_test_tx_group'} >
對應應用id group對應配置文件的
register success, cost 435 ms, version:1.1.0,role:TMROLE,channel:[id: 0xe5bf8da8, L:/192.168.56.1:56235 - R:/192.168.56.1:8091]
註冊成功的
網上這種整合太少 有研究可以交流 哈