下载
:::tips
首先需要下载seata-server压缩包,地址:http://seata.io/zh-cn/blog/download.html
修改配置
:::tips 然后进入conf目录,修改registry.conf文件,配置如下 :::
registry {
#tc服务的注册中心类,这里选择nacos,也可以是eureka、zookeeper等
type = "nacos"
nacos {
#seata tc服务注册到nacos的服务名称,可以自定义
application = "seata-tc-server"
serverAddr = "127.0.0.1:8848"
group = "DEFAULT_GROUP"
namespace = ""
cluster = "SZ"
username = "nacos"
password = "nacos"
}
}
config {
#读取tc服务端的配置文件的方式,这里是从nacos配置中心读取,这样如果tc是集群,可以共享配置
type = "nacos"
#配置nacos地址等信息
nacos {
serverAddr = "127.0.0.1:8848"
namespace = ""
group = "SEATA_GROUP"
username = "nacos"
password = "nacos"
dataId = "seataServer.properties"
}
}
在Nacos中添加配置
:::tips
为了让TC服务的集群可以共享配置,使用Nacos作为统一配置中心,因此服务端配置文件seataServer.properties文件需要在Nacos中配置
配置文件如下,其中数据库地址、用户名、密码都需要修改 :::
#****************= 数据库配置 ****************=#
#事务会话信息存储方式,db代表数据库
store.mode=db
#db模式数据源类型 dbcp、druid、hikari;无默认值,store.mode=db时必须指定
store.db.datasource=druid
#db模式数据库类型。无默认值,store.mode=db时必须指定。
store.db.dbType=mysql
#db模式数据库驱动
store.db.driverClassName=com.mysql.cj.jdbc.Driver
#db模式数据库url
store.db.url=jdbc:mysql://IP地址:端口/数据库名?useUnicode=true&rewriteBatchedStatements=true&userSSL=false&serverTimezone=Asia/Shanghai
#db模式数据库账户
store.db.user=用户名
#db模式数据库账户密码
store.db.password=密码
#db模式数据库初始连接数 默认1
store.db.minConn=5
#db模式数据库最大连接数 默认20
store.db.maxConn=30
#db模式全局事务表名 默认global_table
store.db.globalTable=global_table
#db模式分支事务表名 默认branch_table
store.db.branchTable=branch_table
#db模式查询全局事务一次的最大条数 默认100
store.db.queryLimit=100
#db模式全局锁表名 默认lock_table
store.db.lockTable=lock_table
#db模式获取连接时最大等待时间 默认5000,单位毫秒
store.db.maxWait=5000
#****************** 事务、日志等配置 ******************#
#二阶段提交未完成状态全局事务重试提交线程间隔时间 默认1000,单位毫秒
server.recovery.committingRetryPeriod=1000
#二阶段异步提交状态重试提交线程间隔时间 默认1000,单位毫秒
server.recovery.asynCommittingRetryPeriod=1000
#二阶段回滚状态重试回滚线程间隔时间
server.recovery.rollbackingRetryPeriod=1000
#超时状态检测重试线程间隔时间 默认1000,单位毫秒,检测出超时将全局事务置入回滚会话管理器
server.recovery.timeoutRetryPeriod=1000
#二阶段提交重试超时时长。单位ms,s,m,h,d,对应毫秒,秒,分,小时,天,默认毫秒。默认值-1表示无限重试。公式: timeout>=now-globalTransactionBeginTime,true表示超时则不再重试(注: 达到超时时间后将不会做任何重试,有数据不一致风险,除非业务自行可校准数据,否者慎用)
server.maxCommitRetryTimeout=-1
#二阶段回滚重试超时时长 与maxCommitRetryTimeout类似
server.maxRollbackRetryTimeout=-1
server.rollbackRetryTimeoutUnlockEnable=false
#undo保留天数 默认7天
server.undo.logSaveDays=7
#undo清理线程间隔时间 默认86400000,单位毫秒
server.undo.logDeletePeriod=86400000
#client和server通信编解码方式 默认seata(ByteBuf)
transport.serialization=seata
#client和server通信数据压缩方式 none、gzip,默认none
transport.compressor=none
#关闭metrics功能,默认false关闭,在False状态下,所有与Metrics相关的组件将不会被初始化,使得性能损耗最低
metrics.enabled=false
创建数据库表
:::tips 需要注意tc服务在管理分布式事务时,需要记录事务相关数据到数据库中,需要提前创建好这些表
新建一个名为seata的数据库,运行下面的sql语句 :::
CREATE DATABASE IF NOT EXISTS `seata` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
USE `seata`;
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- -------------------------------- The script used when storeMode is 'db' --------------------------------
-- the table to store GlobalSession data
CREATE TABLE IF NOT EXISTS `global_table`
(
`xid` VARCHAR(128) NOT NULL,
`transaction_id` BIGINT,
`status` TINYINT NOT NULL,
`application_id` VARCHAR(32),
`transaction_service_group` VARCHAR(32),
`transaction_name` VARCHAR(128),
`timeout` INT,
`begin_time` BIGINT,
`application_data` VARCHAR(2000),
`gmt_create` DATETIME,
`gmt_modified` DATETIME,
PRIMARY KEY (`xid`),
KEY `idx_gmt_modified_status` (`gmt_modified`, `status`),
KEY `idx_transaction_id` (`transaction_id`)
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4;
-- the table to store BranchSession data
CREATE TABLE IF NOT EXISTS `branch_table`
(
`branch_id` BIGINT NOT NULL,
`xid` VARCHAR(128) NOT NULL,
`transaction_id` BIGINT,
`resource_group_id` VARCHAR(32),
`resource_id` VARCHAR(256),
`branch_type` VARCHAR(8),
`status` TINYINT,
`client_id` VARCHAR(64),
`application_data` VARCHAR(2000),
`gmt_create` DATETIME(6),
`gmt_modified` DATETIME(6),
PRIMARY KEY (`branch_id`),
KEY `idx_xid` (`xid`)
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4;
-- the table to store lock data
CREATE TABLE IF NOT EXISTS `lock_table`
(
`row_key` VARCHAR(128) NOT NULL,
`xid` VARCHAR(128),
`transaction_id` BIGINT,
`branch_id` BIGINT NOT NULL,
`resource_id` VARCHAR(256),
`table_name` VARCHAR(32),
`pk` VARCHAR(36),
`gmt_create` DATETIME,
`gmt_modified` DATETIME,
PRIMARY KEY (`row_key`),
KEY `idx_branch_id` (`branch_id`)
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4;
SET FOREIGN_KEY_CHECKS = 1;
启动TC服务
:::tips 进入bin目录,运行其中的seata-server.bat,启动成功后,seata-server应该已经注册到Nacos注册中心了 :::