seata1.1.0與consul的整合

半工半搞的,同事用了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]

 

註冊成功的

 

 

 網上這種整合太少 有研究可以交流 哈

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章