Seata + Nacos的Demo搭建

SEATA框架的简单认识

seata的概念SEATA官网里介绍的很清楚,这里只做一些简单认识。
整个SEATA系统搭建需要四个部分,服务端、客户端、注册中心和配置中心。服务端:在https://github.com/seata/seata/releases下载;客户端:就是我们的APP,这里依赖的SEATA包一定要和服务端使用版本相匹配,我用的是1.4.0,会和其他版本存在区别;注册中心和配置中心我们都用Nacos。

1 服务启动流程

Seata + Nacos的Demo搭建

  1. 服务端启动注册到Nacos当中
  2. 客户端通过配置的tx-service-group在配置中心获取service.vgroupMapping.${tx-service-group},即TC集群名称
  3. 客户端获取registry.nacos.application配置,得到服务端注册的服务名
  4. 客户端向注册中心获取服务端服务
  5. 客户端连接服务端
    其中第2步和第4步将TC集群名称与服务端服务储存在Map中,在之后的事务中通过应用配置的tx-service-group来取出对应事务管理服务器地址,进行事务管理。

搭建环境

1 服务端

Seata-Server

从GitHub上下载了服务端压缩包后,解压。目录结构还是比较简单,主要就是conf目录下的文件需要修改。
Seata + Nacos的Demo搭建
这里主要的就是这两个配置文件,因为用的是Nacos,所以file.conf就不用管了,配置registry.conf。

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

    nacos {
      application = "seata-server"
      serverAddr = "127.0.0.1:8848"
      group = "SEATA_GROUP"
      namespace = ""
      cluster = "default"
      username = ""
      password = ""
    }
}

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

  nacos {
    serverAddr = "127.0.0.1:8848"
    namespace = ""
    group = "SEATA_GROUP"
    username = ""
    password = ""
  }
}

2 客户端

2.1 依赖

添加seata的相关依赖

		<dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-alibaba-seata</artifactId>
        </dependency>
        <dependency>
            <groupId>io.seata</groupId>
            <artifactId>seata-all</artifactId>
            <version>1.4.0</version>
        </dependency>

2.2 registry.conf配置

registry.conf配置和服务端一样,复制过来就好
Seata + Nacos的Demo搭建

2.3 SpringBoot配置

application.properties配置里面增加,这里与配置中心的service.vgroupMapping.的后缀对应

spring.cloud.alibaba.seata.tx-service-group=order-service-group

2.4 数据库

每个应用的数据库都需要有一个undo_log表,来记录该节点上的操作,已方便回退。

CREATE TABLE `undo_log`
(
  `id`            BIGINT(20)   NOT NULL AUTO_INCREMENT,
  `branch_id`     BIGINT(20)   NOT NULL,
  `xid`           VARCHAR(100) NOT NULL,
  `context`       VARCHAR(128) NOT NULL,
  `rollback_info` LONGBLOB     NOT NULL,
  `log_status`    INT(11)      NOT NULL,
  `log_created`   DATETIME     NOT NULL,
  `log_modified`  DATETIME     NOT NULL,
  `ext`           VARCHAR(100) DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `ux_undo_log` (`xid`, `branch_id`)
) ENGINE = InnoDB
  AUTO_INCREMENT = 1
  DEFAULT CHARSET = utf8;

3 注册中心

Nacos-Server

请参考 Nacos 快速开始

4 配置中心

与客户端应用中的tx-service-group配置相对应,通过此值来确定TC集群的名称。可以通过脚本nacos-config.sh发布,也可以在Nacos配置界面直接添加。dataId为service.vgroupMapping.order-service-group,Group为registry.conf配置中的SEATA_GROUP,content为default。脚本在GitHub的Seata源码中有。

service.vgroupMapping.order-service-group=default

启动Seata服务端

# 启动seata-server
cd bin
./seata-server.sh -p 8091 -m file
上一篇:Alibaba Seata 分布式事务


下一篇:(1)搞一搞 seata 之 基础环境搭建