下载

:::tips 首先需要下载seata-server压缩包,地址:http://seata.io/zh-cn/blog/download.html

下载好以后解压这个压缩包,目录结构如下
image.png :::

修改配置

:::tips 然后进入conf目录,修改registry.conf文件,配置如下 :::

  1. registry {
  2. #tc服务的注册中心类,这里选择nacos,也可以是eureka、zookeeper等
  3. type = "nacos"
  4. nacos {
  5. #seata tc服务注册到nacos的服务名称,可以自定义
  6. application = "seata-tc-server"
  7. serverAddr = "127.0.0.1:8848"
  8. group = "DEFAULT_GROUP"
  9. namespace = ""
  10. cluster = "SZ"
  11. username = "nacos"
  12. password = "nacos"
  13. }
  14. }
  15. config {
  16. #读取tc服务端的配置文件的方式,这里是从nacos配置中心读取,这样如果tc是集群,可以共享配置
  17. type = "nacos"
  18. #配置nacos地址等信息
  19. nacos {
  20. serverAddr = "127.0.0.1:8848"
  21. namespace = ""
  22. group = "SEATA_GROUP"
  23. username = "nacos"
  24. password = "nacos"
  25. dataId = "seataServer.properties"
  26. }
  27. }

在Nacos中添加配置

:::tips 为了让TC服务的集群可以共享配置,使用Nacos作为统一配置中心,因此服务端配置文件seataServer.properties文件需要在Nacos中配置
image.png

配置文件如下,其中数据库地址、用户名、密码都需要修改 :::

  1. #****************= 数据库配置 ****************=#
  2. #事务会话信息存储方式,db代表数据库
  3. store.mode=db
  4. #db模式数据源类型 dbcp、druid、hikari;无默认值,store.mode=db时必须指定
  5. store.db.datasource=druid
  6. #db模式数据库类型。无默认值,store.mode=db时必须指定。
  7. store.db.dbType=mysql
  8. #db模式数据库驱动
  9. store.db.driverClassName=com.mysql.cj.jdbc.Driver
  10. #db模式数据库url
  11. store.db.url=jdbc:mysql://IP地址:端口/数据库名?useUnicode=true&rewriteBatchedStatements=true&userSSL=false&serverTimezone=Asia/Shanghai
  12. #db模式数据库账户
  13. store.db.user=用户名
  14. #db模式数据库账户密码
  15. store.db.password=密码
  16. #db模式数据库初始连接数 默认1
  17. store.db.minConn=5
  18. #db模式数据库最大连接数 默认20
  19. store.db.maxConn=30
  20. #db模式全局事务表名 默认global_table
  21. store.db.globalTable=global_table
  22. #db模式分支事务表名 默认branch_table
  23. store.db.branchTable=branch_table
  24. #db模式查询全局事务一次的最大条数 默认100
  25. store.db.queryLimit=100
  26. #db模式全局锁表名 默认lock_table
  27. store.db.lockTable=lock_table
  28. #db模式获取连接时最大等待时间 默认5000,单位毫秒
  29. store.db.maxWait=5000
  30. #****************** 事务、日志等配置 ******************#
  31. #二阶段提交未完成状态全局事务重试提交线程间隔时间 默认1000,单位毫秒
  32. server.recovery.committingRetryPeriod=1000
  33. #二阶段异步提交状态重试提交线程间隔时间 默认1000,单位毫秒
  34. server.recovery.asynCommittingRetryPeriod=1000
  35. #二阶段回滚状态重试回滚线程间隔时间
  36. server.recovery.rollbackingRetryPeriod=1000
  37. #超时状态检测重试线程间隔时间 默认1000,单位毫秒,检测出超时将全局事务置入回滚会话管理器
  38. server.recovery.timeoutRetryPeriod=1000
  39. #二阶段提交重试超时时长。单位ms,s,m,h,d,对应毫秒,秒,分,小时,天,默认毫秒。默认值-1表示无限重试。公式: timeout>=now-globalTransactionBeginTime,true表示超时则不再重试(注: 达到超时时间后将不会做任何重试,有数据不一致风险,除非业务自行可校准数据,否者慎用)
  40. server.maxCommitRetryTimeout=-1
  41. #二阶段回滚重试超时时长 与maxCommitRetryTimeout类似
  42. server.maxRollbackRetryTimeout=-1
  43. server.rollbackRetryTimeoutUnlockEnable=false
  44. #undo保留天数 默认7天
  45. server.undo.logSaveDays=7
  46. #undo清理线程间隔时间 默认86400000,单位毫秒
  47. server.undo.logDeletePeriod=86400000
  48. #client和server通信编解码方式 默认seata(ByteBuf)
  49. transport.serialization=seata
  50. #client和server通信数据压缩方式 none、gzip,默认none
  51. transport.compressor=none
  52. #关闭metrics功能,默认false关闭,在False状态下,所有与Metrics相关的组件将不会被初始化,使得性能损耗最低
  53. metrics.enabled=false

创建数据库表

:::tips 需要注意tc服务在管理分布式事务时,需要记录事务相关数据到数据库中,需要提前创建好这些表

新建一个名为seata的数据库,运行下面的sql语句 :::

  1. CREATE DATABASE IF NOT EXISTS `seata` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
  2. USE `seata`;
  3. SET NAMES utf8mb4;
  4. SET FOREIGN_KEY_CHECKS = 0;
  5. -- -------------------------------- The script used when storeMode is 'db' --------------------------------
  6. -- the table to store GlobalSession data
  7. CREATE TABLE IF NOT EXISTS `global_table`
  8. (
  9. `xid` VARCHAR(128) NOT NULL,
  10. `transaction_id` BIGINT,
  11. `status` TINYINT NOT NULL,
  12. `application_id` VARCHAR(32),
  13. `transaction_service_group` VARCHAR(32),
  14. `transaction_name` VARCHAR(128),
  15. `timeout` INT,
  16. `begin_time` BIGINT,
  17. `application_data` VARCHAR(2000),
  18. `gmt_create` DATETIME,
  19. `gmt_modified` DATETIME,
  20. PRIMARY KEY (`xid`),
  21. KEY `idx_gmt_modified_status` (`gmt_modified`, `status`),
  22. KEY `idx_transaction_id` (`transaction_id`)
  23. ) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4;
  24. -- the table to store BranchSession data
  25. CREATE TABLE IF NOT EXISTS `branch_table`
  26. (
  27. `branch_id` BIGINT NOT NULL,
  28. `xid` VARCHAR(128) NOT NULL,
  29. `transaction_id` BIGINT,
  30. `resource_group_id` VARCHAR(32),
  31. `resource_id` VARCHAR(256),
  32. `branch_type` VARCHAR(8),
  33. `status` TINYINT,
  34. `client_id` VARCHAR(64),
  35. `application_data` VARCHAR(2000),
  36. `gmt_create` DATETIME(6),
  37. `gmt_modified` DATETIME(6),
  38. PRIMARY KEY (`branch_id`),
  39. KEY `idx_xid` (`xid`)
  40. ) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4;
  41. -- the table to store lock data
  42. CREATE TABLE IF NOT EXISTS `lock_table`
  43. (
  44. `row_key` VARCHAR(128) NOT NULL,
  45. `xid` VARCHAR(128),
  46. `transaction_id` BIGINT,
  47. `branch_id` BIGINT NOT NULL,
  48. `resource_id` VARCHAR(256),
  49. `table_name` VARCHAR(32),
  50. `pk` VARCHAR(36),
  51. `gmt_create` DATETIME,
  52. `gmt_modified` DATETIME,
  53. PRIMARY KEY (`row_key`),
  54. KEY `idx_branch_id` (`branch_id`)
  55. ) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4;
  56. SET FOREIGN_KEY_CHECKS = 1;

启动TC服务

:::tips 进入bin目录,运行其中的seata-server.bat,启动成功后,seata-server应该已经注册到Nacos注册中心了 :::