前言
在最近的几个版本中seata在配置方面进行了一定的变化,官方减少了一部分配置文件example的直接提供而是需要我们通过在线拉取从官网获取。同时启动配置也从默认配置中移除了很多内容迁移到配置中心,下面我们就以目前1.4.0最新稳定版本为例学习下新版本如何配置启动。
一、配置mysql
1.创建数据表
seata在数据存储方面默认是用的是file模式在生产环境中是不建议这么直接使用的,seata为我们提供了多种可选择的持久化方案。如最常见的mysql,oracle等。同时在1.30版本开始提供redis的支持,redis方式相对关系型数据库拥有更高的性能。话不多说下面我们以最常见的mysql为例进行下相关配置,首先需要创建一个seata数据库。
相关sql脚本目前版本已不直接提供,我们在下载解压seata安装包后会在conf目录的README_zh.md中看到相关信息提示。
# 脚本说明
## [client](https://github.com/seata/seata/tree/develop/script/client)
> 存放用于客户端的配置和SQL
- at: AT模式下的 `undo_log` 建表语句
- conf: 客户端的配置文件
- saga: SAGA 模式下所需表的建表语句
- spring: SpringBoot 应用支持的配置文件
## [server](https://github.com/seata/seata/tree/develop/script/server)
> 存放server侧所需SQL和部署脚本
- db: server 侧的保存模式为 `db` 时所需表的建表语句
- docker-compose: server 侧通过 docker-compose 部署的脚本
- helm: server 侧通过 Helm 部署的脚本
- kubernetes: server 侧通过 Kubernetes 部署的脚本
## [config-center](https://github.com/seata/seata/tree/develop/script/config-center)
> 用于存放各种配置中心的初始化脚本,执行时都会读取 `config.txt`配置文件,并写入配置中心
- nacos: 用于向 Nacos 中添加配置
- zk: 用于向 Zookeeper 中添加配置,脚本依赖 Zookeeper 的相关脚本,需要手动下载;ZooKeeper相关的配置可以写在 `zk-params.txt` 中,也可以在执行的时候输入
- apollo: 向 Apollo 中添加配置,Apollo 的地址端口等可以写在 `apollo-params.txt`,也可以在执行的时候输入
- etcd3: 用于向 Etcd3 中添加配置
- consul: 用于向 consul 中添加配置
我们只需要到对应的github仓库中找到sql语句进行执行即可。seata中总共需要三个表,同时还需要在用到分布式事务的库中创建undo_log表在最常用的AT模式下回滚日志表是必不可少的,注: 是在你所有需要用到分布式事务的业务库下。
2.conf目录file.conf中加入数据库相关信息
数据库相关配置好后,只需要将相关信息写入file.conf。
## transaction log store, only used in seata-server
store {
## store mode: file、db、redis
mode = "db"
## file store property
file {
## store location dir
dir = "sessionStore"
# branch session size , if exceeded first try compress lockkey, still exceeded throws exceptions
maxBranchSessionSize = 16384
# globe session size , if exceeded throws exceptions
maxGlobalSessionSize = 512
# file buffer size , if exceeded allocate new buffer
fileWriteBufferCacheSize = 16384
# when recover batch read size
sessionReloadReadSize = 100
# async, sync
flushDiskMode = async
}
## database store property
db {
vgroupMapping.my_test_tx_group = "default"
## the implement of javax.sql.DataSource, such as DruidDataSource(druid)/BasicDataSource(dbcp)/HikariDataSource(hikari) etc.
datasource = "druid"
## mysql/oracle/postgresql/h2/oceanbase etc.
dbType = "mysql"
driverClassName = "com.mysql.cj.jdbc.Driver"
url = "jdbc:mysql://xxx.36.102.xxx:3306/seata"
user = "root"
password = "199xxxx"
minConn = 5
maxConn = 100
globalTable = "global_table"
branchTable = "branch_table"
lockTable = "lock_table"
queryLimit = 100
maxWait = 5000
}
## redis store property
redis {
host = "127.0.0.1"
port = "6379"
password = ""
database = "0"
minConn = 1
maxConn = 10
maxTotal = 100
queryLimit = 100
}
}
二、配置nacos
1.单独创建seata命名空间
从官网拉取nacos配置脚本:
https://github.com/seata/seata/blob/develop/script/config-center/nacos/nacos-config.sh
如果在windows环境下,需要借助gitBash来运行我们的shell脚本。在执行脚本前我们需要拿到nacos-conf.txt配置文件,以便接下来通过脚本导入。在配置文件中根据自己需求进行修改,常规的修改项有数据库相关跟service.vgroupMapping.knight9z_tx_group=default这里要切记后面与spring项目中配置保持一致。这里很关键切记
https://github.com/seata/seata/tree/develop/script/config-center
下面是spring中关键配置代码
tx-service-group: knight9z_tx_group
service:
vgroup-mapping:
tx-service-group:
knight9z_tx_group: default
transport.type=TCP
transport.server=NIO
transport.heartbeat=true
transport.enableClientBatchSendRequest=false
transport.threadFactory.bossThreadPrefix=NettyBoss
transport.threadFactory.workerThreadPrefix=NettyServerNIOWorker
transport.threadFactory.serverExecutorThreadPrefix=NettyServerBizHandler
transport.threadFactory.shareBossWorker=false
transport.threadFactory.clientSelectorThreadPrefix=NettyClientSelector
transport.threadFactory.clientSelectorThreadSize=1
transport.threadFactory.clientWorkerThreadPrefix=NettyClientWorkerThread
transport.threadFactory.bossThreadSize=1
transport.threadFactory.workerThreadSize=default
transport.shutdown.wait=3
service.vgroupMapping.knight9z_tx_group=default
service.default.grouplist=127.0.0.1:8091
service.enableDegrade=false
service.disableGlobalTransaction=false
client.rm.asyncCommitBufferLimit=10000
client.rm.lock.retryInterval=10
client.rm.lock.retryTimes=30
client.rm.lock.retryPolicyBranchRollbackOnConflict=true
client.rm.reportRetryCount=5
client.rm.tableMetaCheckEnable=false
client.rm.tableMetaCheckerInterval=60000
client.rm.sqlParserType=druid
client.rm.reportSuccessEnable=false
client.rm.sagaBranchRegisterEnable=false
client.tm.commitRetryCount=5
client.tm.rollbackRetryCount=5
client.tm.defaultGlobalTransactionTimeout=60000
client.tm.degradeCheck=false
client.tm.degradeCheckAllowTimes=10
client.tm.degradeCheckPeriod=2000
store.mode=db
store.publicKey=
store.file.dir=file_store/data
store.file.maxBranchSessionSize=16384
store.file.maxGlobalSessionSize=512
store.file.fileWriteBufferCacheSize=16384
store.file.flushDiskMode=async
store.file.sessionReloadReadSize=100
store.db.datasource=druid
store.db.dbType=mysql
store.db.driverClassName=com.mysql.cj.jdbc.Driver
store.db.url=jdbc:mysql://xxx.xx.xxx.230:3306/seata?useUnicode=true&rewriteBatchedStatements=true
store.db.user=root
store.db.password=1xxxxx
store.db.minConn=5
store.db.maxConn=30
store.db.globalTable=global_table
store.db.branchTable=branch_table
store.db.queryLimit=100
store.db.lockTable=lock_table
store.db.maxWait=5000
store.redis.mode=single
store.redis.single.host=127.0.0.1
store.redis.single.port=6379
store.redis.maxConn=10
store.redis.minConn=1
store.redis.maxTotal=100
store.redis.database=0
store.redis.password=
官网也直接为我们提供了脚本启动命令,我们只需要将seata命名空间替换为自己的即可,脚本正常执行的话控制台会打印相关配置导入信息。切记替换命名空间,同时nacos-conf.txt需要放置在我们的脚本目录的外级,否则会报找不到配置文静提示。
sh ${SEATAPATH}/script/config-center/nacos/nacos-config.sh -h localhost -p 8848 -g SEATA_GROUP -t 5a3c7d6c-f497-4d68-a71a-2e5e3340b3ca -u username -w password
成功导入配置信息到这里基本配置就结束了,希望能帮到大家快速掌握新版本。后面只需要启动seataserver启动脚本即可。在nacos服务中心能看到我们的seata服务就代表成功。这里要注意配置注册中心时指定命名空间的正确性,如果注册中心没有发现服务可以看一下是不是命名空间配置出现了纰漏。