服务器端

从github上把seata下载下来,然后修改conf下的registry文件,这里我们使用Nacos注册和配置方式,所以只需要修改nacos这一块的内容,其它的放着不动就行了。

registry {
  # file 、nacos 、eureka、redis、zk、consul、etcd3、sofa
  type = "nacos"

  nacos {
    application = "seata-server"
    serverAddr = "81.68.XXX.XXX:8848"
    group = "SEATA_GROUP"
    namespace = ""
    cluster = "default"
    username = ""
    password = ""
  }
  eureka {
    serviceUrl = "http://localhost:8761/eureka"
    application = "default"
    weight = "1"
  }
  redis {
    serverAddr = "localhost:6379"
    db = 0
    password = ""
    cluster = "default"
    timeout = 0
  }
  zk {
    cluster = "default"
    serverAddr = "127.0.0.1:2181"
    sessionTimeout = 6000
    connectTimeout = 2000
    username = ""
    password = ""
  }
  consul {
    cluster = "default"
    serverAddr = "127.0.0.1:8500"
  }
  etcd3 {
    cluster = "default"
    serverAddr = "http://localhost:2379"
  }
  sofa {
    serverAddr = "127.0.0.1:9603"
    application = "default"
    region = "DEFAULT_ZONE"
    datacenter = "DefaultDataCenter"
    cluster = "default"
    group = "SEATA_GROUP"
    addressWaitTime = "3000"
  }
  file {
    name = "file.conf"
  }
}

config {
  # file、nacos 、apollo、zk、consul、etcd3
  type = "nacos"

  nacos {
    serverAddr = "81.68.XXX.XXX:8848"
    namespace = ""
    group = "SEATA_GROUP"
    username = ""
    password = ""
  }
  consul {
    serverAddr = "127.0.0.1:8500"
  }
  apollo {
    appId = "seata-server"
    apolloMeta = "http://192.168.1.204:8801"
    namespace = "application"
  }
  zk {
    serverAddr = "127.0.0.1:2181"
    sessionTimeout = 6000
    connectTimeout = 2000
    username = ""
    password = ""
  }
  etcd3 {
    serverAddr = "http://localhost:2379"
  }
  file {
    name = "file.conf"
  }
}

我们来看一下里面的readme文件:

# 脚本说明

## [client](https://github.com/seata/seata/tree/develop/script/client) 

> 存放用于客户端的配置和SQL

- at: AT模式下的 `undo_log` 建表语句
- conf: 客户端的配置文件
- saga: SAGA 模式下所需表的建表语句
- spring: SpringBoot 应用支持的配置文件

## [server](https://github.com/seata/seata/tree/develop/script/server)

> 存放server侧所需SQL和部署脚本

- db: server 侧的保存模式为 `db` 时所需表的建表语句
- docker-compose: server 侧通过 docker-compose 部署的脚本
- helm: server 侧通过 Helm 部署的脚本
- kubernetes: server 侧通过 Kubernetes 部署的脚本

## [config-center](https://github.com/seata/seata/tree/develop/script/config-center)

> 用于存放各种配置中心的初始化脚本,执行时都会读取 `config.txt`配置文件,并写入配置中心

- nacos: 用于向 Nacos 中添加配置
- zk: 用于向 Zookeeper 中添加配置,脚本依赖 Zookeeper 的相关脚本,需要手动下载;ZooKeeper相关的配置可以写在 `zk-params.txt` 中,也可以在执行的时候输入
- apollo: 向 Apollo 中添加配置,Apollo 的地址端口等可以写在 `apollo-params.txt`,也可以在执行的时候输入
- etcd3: 用于向 Etcd3 中添加配置
- consul: 用于向 consul 中添加配置

由于我们使用的是nacos的配置方式,只需要第1条必要的SQL脚本和第3条的配置脚本。
关于第3条的如何操作,先修改config文件:
config文件位置
然后修改这2行,其它的看需要修改,后面的客户端配置和这个也有关系:
config文件

然后用他提供的脚本倒入你自己的Nacos配置管理中去:
执行脚本文件

然后我们启动seata-server即可,服务端实际上就这些配置。

客户端

Maven倒入以下依赖

<dependency>
  <groupId>com.alibaba.cloud</groupId>
  <artifactId>spring-cloud-alibaba-seata</artifactId>
  <version>2.2.0.RELEASE</version>
</dependency>

然后是YML文件中相关的配置:

spring:
  cloud:
    nacos:
      discovery:
        server-addr: 81.68.XX.XX:8848
    alibaba:
      seata:
        tx-service-group: my_test_tx_group
seata:
  service:
    disable-global-transaction: false
    enable-degrade: false
    grouplist:
      default: 81.68.XX.XX:8091
    vgroup-mapping:
      my_test_tx_group: default

上面的my_test_tx_group务必和服务器端config.txt(就是脚本倒入Nacos配置中心的)中保持一致

service.vgroupMapping.my_test_tx_group=default
service.default.grouplist=81.68.XXX.XXX:8091

关于读隔离:

对于不参与全局事务的读操作,需要加上@GlobalLock注解,并且在select语句中加上for update,这样才会申请全局锁,而且会打开重试器。

关于写隔离:

对于不参与全局事务的写操作,同样需要加上@GlobalLock注解,seata默认会对insert,update,delete操作申请全局锁,但是如果没有申请到,会直接抛出异常,回滚。如果想要重试,需要添加select for update才有。
参考资料:https://www.cnblogs.com/crazymakercircle/p/18007172