Spring Cloud集成seata

Spring Cloud —seata

Spring Cloud 项目,分布式事务seata集成
本文只针对springcloud环境集成seata

技术版本说明

服务技术介绍
1.springcloud:2021.0.3
2.springboot:2.6.9
3.springcloudAlibaba:2021.0.1.0Spring Cloud Alibaba
4.nacos:2.0.4nacos官方文档 】=>【github地址
5.seata:1.5.2seata官方文档 】 =>【 github地址

seata-server

1.下载 seata-server

1> 打开nacos地址
在这里插入图片描述
下载任意一个,放到服务器上,解压文件夹
在这里插入图片描述

2.nacos配置

1> nacos上创建新的命名空间seata,用于配置seata-server
在这里插入图片描述
2> 配置 application.yml

server:
  port: 7091
spring:
  application:
    name: seata-server
logging:
  config: classpath:logback-spring.xml
  file:
    path: ./logs/seata
#  extend:
#    logstash-appender:
#      destination: 127.0.0.1:4560
#    kafka-appender:
#      bootstrap-servers: 127.0.0.1:9092
#      topic: logback_to_logstash

console:
  user:
    username: seata
    password: seata

seata:
  config:
    # support: nacos 、 consul 、 apollo 、 zk  、 etcd3
    type: nacos
    nacos:
      # nacos ip地址
      server-addr: 127.0.0.1:8848
      group: SEATA_GROUP
      namespace: ******
      username: nacos
      password: nacos
      data-id: seata-server.yml
  registry:
    # support: nacos 、 eureka 、 redis 、 zk  、 consul 、 etcd3 、 sofa
    type: nacos
    nacos:
      application: seata-server
      # nacos ip地址
      server-addr: 127.0.0.1:8848
      group: SEATA_GROUP
      namespace: ******
      cluster: default
      username: nacos
      password: nacos
      data-id: seata-server.yml
  security:
    secretKey: SeataSecretKey0c382ef121d778043159209298fd40bf3850a017
    tokenValidityInMilliseconds: 1800000
    ignore:
      urls: /,/**/*.css,/**/*.js,/**/*.html,/**/*.map,/**/*.svg,/**/*.png,/**/*.ico,/console-fe/public/**,/api/v1/auth/login

注:
namespaceserver-addr属性改成自己的
3> seata配置同步
通过脚本上传配置到Nacos
参考https://github.com/seata/seata/tree/develop/script/config-center 的config.txt并修改,之后运行仓库中提供的nacos脚本,将信息提交到nacos控 制台,如果有需要更改,可直接通过控制台更改.

eg: sh ${SEATAPATH}/script/config-center/nacos/nacos-config.sh -h localhost -p 8848 -g SEATA_GROUP -t 5a3c7d6c-f497-4d68-a71a-2e5e3340b3ca -u username -w password

同步后
在这里插入图片描述
主要的几个配置
存储模式:file、db、redis 支持三种
在这里插入图片描述
根据存储模式,配置相关配置
在这里插入图片描述
4>seata空间创建seata-server.yml

seata:
  enabled: true
  tx-service-group: default_tx_group
  enableAutoDataSourceProxy: true
  #enable-auto-data-source-proxy: true
  data-source-proxy-mode: AT
  use-jdk-proxy: false
  client:
    rm:
      async-commit-buffer-limit: 10000
      report-retry-count: 5
      table-meta-check-enable: false
      report-success-enable: false
#      saga-branch-register-enable: false
#      saga-json-parser: jackson
#      saga-retry-persist-mode-update: false
#      saga-compensate-persist-mode-update: false
#      tcc-action-interceptor-order: -2147482648 #Ordered.HIGHEST_PRECEDENCE + 1000
      lock:
        retry-interval: 10
        retry-times: 30
        retry-policy-branch-rollback-on-conflict: true
    tm:
      commit-retry-count: 5
      rollback-retry-count: 5
      default-global-transaction-timeout: 60000
      degrade-check: false
      degrade-check-period: 2000
      degrade-check-allow-times: 10
      interceptor-order: -2147482648 #Ordered.HIGHEST_PRECEDENCE + 1000
    undo:
      data-validation: true
      log-serialization: jackson
      log-table: undo_log
      only-care-update-columns: true
      compress:
        enable: true
        type: zip
        threshold: 64k
    load-balance:
      type: RandomLoadBalance
      virtual-nodes: 10
  service:
    vgroupMapping:
      default_tx_group: default
    grouplist:
      default: 127.0.0.1:8091
    enable-degrade: false
    disable-global-transaction: false
  transport:
    shutdown:
      wait: 3
    thread-factory:
      boss-thread-prefix: NettyBoss
      worker-thread-prefix: NettyServerNIOWorker
      server-executor-thread-prefix: NettyServerBizHandler
      share-boss-worker: false
      client-selector-thread-prefix: NettyClientSelector
      client-selector-thread-size: 5
      client-worker-thread-prefix: NettyClientWorkerThread
      worker-thread-size: default
      boss-thread-size: 1
    type: TCP
    server: NIO
    heartbeat: true
    serialization: seata
    compressor: none
    enable-client-batch-send-request: true
  log:
    exception-rate: 100

5>seata空间创建事务组映射关系-(server端)
在这里插入图片描述
此配置和 seata-server.yml中的
在这里插入图片描述
配置是一样的,放到nacos是方便配置,根据业务需要动态增加

注意:
1. seata-server.yml中,在这里插入图片描述

在这里插入图片描述
要对应

3.建表

1>seata-server:
如果store用的是db模式,则需要在seata-server链接的数据库创建sql【链接
在这里插入图片描述
按需创建就完事了!!!

2>客户端(应用):
如果data-source-proxy-mode设置的是AT事务模式介绍
则需要创建undo_log表【链接
在这里插入图片描述

4.启动

./seata-server.sh -h 127.0.0.1
启动必须带host,是seata-server应用所在机器的ip,否则客户端在回滚时会报错,无法连接到seata-server

io.seata.common.exception.FrameworkException: can not connect to services-server.

客户端(微服务应用)

1.模块配置

抽出模块,方便统一管理,去掉seata旧版本依赖,引入最新依赖
在这里插入图片描述

2.nacos客户端配置

客户端连接seata配置,因为业务配置是在dev命名空间,所以重新配置客户端 common-seata-nacos.yml

seata:
  enable: true
  config:
    type: nacos
    nacos:
      namespace: ******
      server-addr: 127.0.0.1:8848
      group: SEATA_GROUP
      username: "nacos"
      password: "nacos"
  registry:
    type: nacos
    nacos:
      application: seata-server
      server-addr: 127.0.0.1:8848
      group : SEATA_GROUP
      namespace: ******
      username: "nacos"
      password: "nacos"

替换namespaceserver-addr即可

同时增加事务组配置,业务应用增加配置

seata:
  tx-service-group: default_tx_group
  service:
    vgroupMapping:
      default_tx_group: default
logging:
    level:
        io:
            seata: debug

3.代码

springboot启动类增加注解

@EnableTransactionManagement

方法实现层增加

@GlobalTransactional

举例:
在这里插入图片描述

在这里插入图片描述

4.启动服务

over!

总结


版权声明:本文为qq_32415191原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。