SpringCloud Alibab-Seata 简介:
Seata 是一款开源的分布式事务解决方案,致力于在微服务架构下提供高性能和简单易用的分布式事务服务。
Seata 将为用户提供了 AT、TCC、SAGA 和 XA 事务模式,为用户打造一站式的分布式解决方案。
原Fescar,即分布式事务解决方案。
详细介绍,可以阅读 SpringCloud Alibab-Seata 官网
一、SpringBoot 整合 Seata
1、前置要求
整合Seata之前,必须已经做了如下的前置要求:
1、创建表 undo_log
-
SEATA AT 模式需要 每一个微服务对应的数据库表必须先创建表 undo_log(回滚记录表)
– 注意此处0.3.0+ 增加唯一索引 ux_undo_log
CREATE TABLEundo_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 KEYux_undo_log
(xid
,branch_id
)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
2、安装事务协调器(seata-server)
下载并安装最新版的事务协调器(seata-server)。
- 下载 seata-server V1.5.1 ,GitHub下载地址
- 执行/conf 目录下的启动文件,正常启动。
2、导入依赖
<!--Seata (分布式事务解决方案)-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-seata</artifactId>
<!-- 根据spring-cloud-alibaba版本自定导入对应版本的seata依赖 -->
<version>${spring-cloud-alibaba.version}</version>
</dependency>
<!--如果想单独升级 seata版本使用最新版,可以自己导入 seata 核心包-->
<dependency>
<groupId>io.seata</groupId>
<artifactId>seata-spring-boot-starter</artifactId>
<version>1.5.1</version>
</dependency>
maven 依赖关系图如下:
3、添加Seata配置
方案一:file.conf
+ registry.conf
(原始配置)
seata 配置方式默认是
file
,从文件读取,seata也提供了其他的配置方式,比如放到:Nacos、Apollo等配置中心。
以下讲解默认的
file
配置方式,如需要使用配置中心的方式,请自行抽取到配置中心:
将
file.conf
文件添加到/resources
配置路径下,跟application.yml
同级。将
registry.conf
文件添加到/resources
配置路径下,跟application.yml
同级。
file.conf
示例
最新的示例配置,请参考官方文档。此示例是拷贝自 v1.5.0 - v1.5.1 seata conf配置文件地址 。
- 这里重点关注
service.vgroupMapping.default_tx_group = "default"
配置,default_tx_group
这个是v1.5.1
版本默认事务组名字,如果想自定义这个事务组名字,可以配置seata.tx-service-group=default_tx_group
自定义。- 如果对不上,当客户端启动时会注册不到
seata-server
,控制台会报错can not get cluster name in registry config 'service.vgroupMapping.default_tx_group', please make sure registry config correct
。
transport {
# tcp udt unix-domain-socket
type = "TCP"
#NIO NATIVE
server = "NIO"
#enable heartbeat
heartbeat = true
# the client batch send request enable
enableClientBatchSendRequest = true
#thread factory for netty
threadFactory {
bossThreadPrefix = "NettyBoss"
workerThreadPrefix = "NettyServerNIOWorker"
serverExecutorThread-prefix = "NettyServerBizHandler"
shareBossWorker = false
clientSelectorThreadPrefix = "NettyClientSelector"
clientSelectorThreadSize = 1
clientWorkerThreadPrefix = "NettyClientWorkerThread"
# netty boss thread size,will not be used for UDT
bossThreadSize = 1
#auto default pin or 8
workerThreadSize = "default"
}
shutdown {
# when destroy server, wait seconds
wait = 3
}
serialization = "seata"
compressor = "none"
}
service {
#transaction service group mapping
vgroupMapping.default_tx_group = "default"
#only support when registry.type=file, please don't set multiple addresses
default.grouplist = "127.0.0.1:8091"
#degrade, current not support
enableDegrade = false
#disable seata
disableGlobalTransaction = false
}
client {
rm {
asyncCommitBufferLimit = 10000
lock {
retryInterval = 10
retryTimes = 30
retryPolicyBranchRollbackOnConflict = true
}
reportRetryCount = 5
tableMetaCheckEnable = false
reportSuccessEnable = false
}
tm {
commitRetryCount = 5
rollbackRetryCount = 5
}
undo {
dataValidation = true
logSerialization = "jackson"
logTable = "undo_log"
}
log {
exceptionRate = 100
}
}
registry.conf
示例
最新的示例配置,请参考官方文档。此示例是拷贝自 v1.5.0 - v1.5.1 seata conf配置文件地址 。
registry {
# file 、nacos 、eureka、redis、zk、