SEATA框架的简单认识
seata的概念SEATA官网里介绍的很清楚,这里只做一些简单认识。
整个SEATA系统搭建需要四个部分,服务端、客户端、注册中心和配置中心。服务端:在https://github.com/seata/seata/releases下载;客户端:就是我们的APP,这里依赖的SEATA包一定要和服务端使用版本相匹配,我用的是1.4.0,会和其他版本存在区别;注册中心和配置中心我们都用Nacos。
1 服务启动流程
- 服务端启动注册到Nacos当中
- 客户端通过配置的tx-service-group在配置中心获取service.vgroupMapping.${tx-service-group},即TC集群名称
- 客户端获取registry.nacos.application配置,得到服务端注册的服务名
- 客户端向注册中心获取服务端服务
- 客户端连接服务端
其中第2步和第4步将TC集群名称与服务端服务储存在Map中,在之后的事务中通过应用配置的tx-service-group来取出对应事务管理服务器地址,进行事务管理。
搭建环境
1 服务端
Seata-Server
从GitHub上下载了服务端压缩包后,解压。目录结构还是比较简单,主要就是conf目录下的文件需要修改。
这里主要的就是这两个配置文件,因为用的是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配置和服务端一样,复制过来就好
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