跳到主要内容
版本:v1.0

seata 参数配置 1.0.0 版本

变更记录

20191221: 增加seata.enabled、client.report.success.enable、
transport.enable-client-batch-send-request、client.log.exceptionRate

关注属性(详细描述见全属性)

server 端client 端
registry.typeregistry.type
config.typeconfig.type
store.modeservice.vgroup_mapping.my_test_tx_group
store.db.driver-class-nameservice.default.grouplist
store.db.urlservice.disableGlobalTransaction
store.db.userclient.support.spring.datasource.autoproxy
store.db.password

全属性

公共部分

keydescremark
transport.serializationclient 和 server 通信编解码方式seata(ByteBuf)、protobuf、kryo、hessian,默认 seata
transport.compressorclient 和 server 通信数据压缩方式none、gzip,默认 none
transport.heartbeatclient 和 server 通信心跳检测开关默认 true 开启
registry.type注册中心类型默认 file,支持 file 、nacos 、eureka、redis、zk、consul、etcd3、sofa、custom
config.type配置中心类型默认 file,支持 file、nacos 、apollo、zk、consul、etcd3、custom

server 端

keydescremark
server.undo.log.save.daysundo 保留天数默认 7 天,log_status=1(附录 3)和未正常清理的 undo
server.undo.log.delete.periodundo 清理线程间隔时间默认 86400000,单位毫秒
server.max.commit.retry.timeout二阶段提交重试超时时长单位 ms,s,m,h,d,对应毫秒,秒,分,小时,天,默认毫秒。默认值-1 表示无限重试。公式: timeout>=now-globalTransactionBeginTime,true 表示超时则不再重试
server.max.rollback.retry.timeout二阶段回滚重试超时时长同 commit
server.recovery.committing-retry-period二阶段提交未完成状态全局事务重试提交线程间隔时间默认 1000,单位毫秒
server.recovery.asyn-committing-retry-period二阶段异步提交状态重试提交线程间隔时间默认 1000,单位毫秒
server.recovery.rollbacking-retry-period二阶段回滚状态重试回滚线程间隔时间默认 1000,单位毫秒
server.recovery.timeout-retry-period超时状态检测重试线程间隔时间默认 1000,单位毫秒,检测出超时将全局事务置入回滚会话管理器
store.mode事务会话信息存储方式file 本地文件(不支持 HA),db 数据库(支持 HA)
store.file.dirfile 模式文件存储文件夹名默认 sessionStore
store.db.datasourcedb 模式数据源类型默认 dbcp
store.db.db-typedb 模式数据库类型默认 mysql
store.db.driver-class-namedb 模式数据库驱动默认 com.mysql.jdbc.Driver
store.db.urldb 模式数据库 url默认 jdbc:mysql://127.0.0.1:3306/seata
store.db.userdb 模式数据库账户默认 mysql
store.db.passworddb 模式数据库账户密码默认 mysql
store.db.min-conndb 模式数据库初始连接数默认 1
store.db.max-conndb 模式数据库最大连接数默认 3
store.db.global.tabledb 模式全局事务表名默认 global_table
store.db.branch.tabledb 模式分支事务表名默认 branch_table
store.db.lock-tabledb 模式全局锁表名默认 lock_table
store.db.query-limitdb 模式查询全局事务一次的最大条数默认 100
metrics.enabled是否启用 Metrics默认 false 关闭,在 False 状态下,所有与 Metrics 相关的组件将不会被初始化,使得性能损耗最低
metrics.registry-type指标注册器类型Metrics 使用的指标注册器类型,默认为内置的 compact(简易)实现,这个实现中的 Meter 仅使用有限内存计数,性能高足够满足大多数场景;目前只能设置一个指标注册器实现
metrics.exporter-list指标结果 Measurement 数据输出器列表默认 prometheus,多个输出器使用英文逗号分割,例如"prometheus,jmx",目前仅实现了对接 prometheus 的输出器
metrics.exporter-prometheus-portprometheus 输出器 Client 端口号默认 9898

client 端

keydescremark
seata.enabled是否开启 spring-boot 自动装配true、false,默认 true(附录 4)
client.report.success.enable是否上报一阶段成功true、false,默认 true 用于保持分支事务生命周期记录完整,false 可提高不少性能
transport.enable-client-batch-send-request客户端事务消息请求是否批量合并发送默认 true,false 单条发送
client.log.exceptionRate日志异常输出概率默认 100,目前用于 undo 回滚失败时异常堆栈输出,百分之一的概率输出,回滚失败基本是脏数据,无需输出堆栈占用硬盘空间
service.vgroup_mapping.my_test_tx_group事务群组(附录 1)my_test_tx_group 为分组,配置项值为 TC 集群名
service.default.grouplistTC 服务列表(附录 2)仅注册中心为 file 时使用
service.disableGlobalTransaction全局事务开关默认 false。false 为开启,true 为关闭
service.enableDegrade降级开关(待实现)默认 false。业务侧根据连续错误数自动降级不走 seata 事务
client.rm.async.commit.buffer.limit异步提交缓存队列长度默认 10000。 二阶段提交成功,RM 异步清理 undo 队列
client.rm.lock.retry.internal校验或占用全局锁重试间隔默认 10,单位毫秒
client.rm.lock.retry.times校验或占用全局锁重试次数默认 30
client.rm.lock.retry.policy.branch-rollback-on-conflict分支事务与其它全局回滚事务冲突时锁策略默认 true,优先释放本地锁让回滚成功
client.rm.report.retry.count一阶段结果上报 TC 重试次数默认 5 次
client.rm.table.meta.check.enable自动刷新缓存中的表结构默认 false
client.tm.commit.retry.count一阶段全局提交结果上报 TC 重试次数默认 1 次,建议大于 1
client.tm.rollback.retry.count一阶段全局回滚结果上报 TC 重试次数默认 1 次,建议大于 1
client.undo.data.validation二阶段回滚镜像校验默认 true 开启,false 关闭
client.undo.log.serializationundo 序列化方式默认 jackson
client.undo.log.table自定义 undo 表名默认 undo_log
client.support.spring.datasource.autoproxy数据源自动代理开关默认 false 关闭

未使用

keydescremark
lock.mode锁存储方式local、remote
lock.local
lock.remote

参数同步到配置中心使用 demo

Nacos

shell:

sh $\{SEATAPATH}/script/config-center/nacos/nacos-config.sh -h localhost -p 8848 -g SEATA_GROUP -t 5a3c7d6c-f497-4d68-a71a-2e5e3340b3ca

参数说明:

-h: host,默认值 localhost

-p: port,默认值 8848

-g: 配置分组,默认值为 'SEATA_GROUP'

-t: 租户信息,对应 Nacos 的命名空间 ID 字段, 默认值为空 ''

Apollo

sh $\{SEATAPATH}/script/config-center/apollo/apollo-config.sh -h localhost -p 8070 -e DEV -a seata-server -c default -n application -d apollo -r apollo -t 3aa026fc8435d0fc4505b345b8fa4578fb646a2c

参数说明:

-h: host,默认值 localhost

-p: port,默认值 8070

-e: 所管理的配置环境,默认值 DEV

-a: Namespace 所属的 AppId,默认值 seata-server

-c: 所管理的配置集群名, 一般情况下传入 default 即可。如果是特殊集群,传入相应集群的名称即可,默认值 default

-n: 所管理的 Namespace 的名称,如果是非 properties 格式,需要加上后缀名,如 sample.yml,默认值 application

-d: item 的创建人,格式为域账号,也就是 sso 系统的 User ID

-r: 发布人,域账号,注意:如果 ApolloConfigDB.ServerConfig 中的 namespace.lock.switch 设置为 true 的话(默认是 false),那么该环境不允许发布人和编辑人为同一人。所以如果编辑人是 zhangsan,发布人就不能再是 zhangsan。

-t: Apollo 管理员在 http://{portal_address}/open/manage.html 创建第三方应用,创建之前最好先查询此 AppId 是否已经创建。创建成功之后会生成一个 token

以上参数说明详情请看:

https://github.com/ctripcorp/apollo/wiki/Apollo%E5%BC%80%E6%94%BE%E5%B9%B3%E5%8F%B0

Consul

sh $\{SEATAPATH}/script/config-center/consul/consul-config.sh -h localhost -p 8500

参数说明:

-h: host,默认值 localhost

-p: port,默认值 8500

Etcd3

sh $\{SEATAPATH}/script/config-center/etcd3/etcd3-config.sh -h localhost -p 2379

参数说明:

-h: host,默认值 localhost

-p: port,默认值 2379

python:

python $\{SEATAPATH}/script/config-center/nacos/nacos-config.py localhost:8848

ZK

sh $\{SEATAPATH}/script/config-center/zk/zk-config.sh -h localhost -p 2181 -z "/Users/zhangchenghui/zookeeper-3.4.14"

参数说明:

-h: host,默认值 localhost

-p: port,默认值 2181

-z: zk 所属路径

附录 1:

事务分组说明。 1.事务分组是什么? 事务分组是seata的资源逻辑,类似于服务实例。在file.conf中的my_test_tx_group就是一个事务分组。 2.通过事务分组如何找到后端集群? 首先程序中配置了事务分组(GlobalTransactionScanner 构造方法的txServiceGroup参数),程序会通过用户配置的配置中心去寻找service.vgroup_mapping.事务分组配置项,取得配置项的值就是TC集群的名称。拿到集群名称程序通过一定的前后缀+集群名称去构造服务名,各配置中心的服务名实现不同。拿到服务名去相应的注册中心去拉取相应服务名的服务列表,获得后端真实的TC服务列表。 3.为什么这么设计,不直接取服务名? 这里多了一层获取事务分组到映射集群的配置。这样设计后,事务分组可以作为资源的逻辑隔离单位,当发生故障时可以快速failover。

附录 2:

关于grouplist问题说明下。

  1. 什么时候会用到file.conf中的default.grouplist? 当registry.type=file时会用到,其他时候不读。
  2. default.grouplist的值列表是否可以配置多个? 可以配置多个,配置多个意味着集群,但当store.mode=file时,会报错。原因是在file存储模式下未提供本地文件的同步,所以需要使用store.mode=db,通过db来共享TC集群间数据
  3. 是否推荐使用default.grouplist? 不推荐,如问题1,当registry.type=file时会用到,也就是说这里用的不是真正的注册中心,不具体服务的健康检查机制当tc不可用时无法自动剔除列表,推荐使用nacos 、eureka、redis、zk、consul、etcd3、sofa。registry.type=file或config.type=file 设计的初衷是让用户再不依赖第三方注册中心或配置中心的前提下,通过直连的方式,快速验证seata服务。

附录 3:

log_status=1的是防御性的,是收到全局回滚请求,但是不确定某个事务分支的本地事务是否已经执行完成了,这时事先插入一条branchid相同的数据,插入的假数据成功了,本地事务继续执行就会报主键冲突自动回滚。 假如插入不成功说明表里有数据这个本地事务已经执行完成了,那么取出这条undolog数据做反向回滚操作。

附录 4:

是否开启spring-boot自动装配,如果开启,则会自动配置seata与spring-boot的集成,包括数据源的自动代理以及GlobalTransactionScanner初始化。 注:1.0版本新特性,需依赖seata-spring-boot-starter。