1.概述
最近在集成seata的时候,由于官方并没有直接的集成文档,因此在使用的时候会有一些问题,问AI有时又不好解决,这个时候通过源码分析问题就很有必要,本文介绍一下如何启动 server server。
2.实现过程
2.1 下载源码
https://seata.apache.org/download/seata-server
下载2.5的源码
2.2 编译源码
首先我们不能直接启动,需要编译一下源码,因为有一些代码不要编译生成类,否则启动不了。
2.3 准备NACOS 配置
我们使用 nacos 对seata 进行集成,因此我们需要准备下 nacos 的相关配置数据。
我们在 nacos 增加一个配置
data-id 为seataServer.properties,分组为 SEATA_GROUP ,配置内容为
transport.protocol=seata
transport.type=TCP
transport.server=NIO
transport.heartbeat=true
transport.enableTmClientBatchSendRequest=false
transport.enableRmClientBatchSendRequest=true
transport.enableTcServerBatchSendResponse=false
transport.rpcRmRequestTimeout=30000
transport.rpcTmRequestTimeout=30000
transport.rpcTcRequestTimeout=30000
transport.enableClientSharedEventLoopGroup=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
transport.serialization=seata
transport.compressor=none
#HTTP thread pool
transport.minHttpPoolSize=10
transport.maxHttpPoolSize=100
transport.maxHttpTaskQueueSize=1000
transport.httpPoolKeepAliveTime=500
transport.serverSocketSendBufSize=153600
transport.serverSocketResvBufSize=153600
transport.writeBufferHighWaterMark=67108864
transport.writeBufferLowWaterMark=1048576
transport.soBackLogSize=1024
transport.serverChannelMaxIdleTimeSeconds=30
transport.minServerPoolSize=50
transport.maxServerPoolSize=500
transport.maxTaskQueueSize=20000
transport.keepAliveTime=500
#Transaction routing rules configuration, only for the client
service.vgroupMapping.lowcode_tx_group=default
service.vgroupMapping.order_tx_group=default
service.vgroupMapping.inventory_tx_group=default
#If you use a registry, you can ignore it
service.default.grouplist=127.0.0.1:8091
service.disableGlobalTransaction=false
client.metadataMaxAgeMs=30000
#Transaction rule configuration, only for the client
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=true
client.rm.tableMetaCheckerInterval=60000
client.rm.sqlParserType=druid
client.rm.reportSuccessEnable=false
client.rm.sagaBranchRegisterEnable=false
client.rm.sagaJsonParser=fastjson
client.rm.tccActionInterceptorOrder=-2147482648
client.rm.sqlParserType=druid
client.tm.nThreads=20
client.tm.commitRetryCount=5
client.tm.rollbackRetryCount=5
client.tm.defaultGlobalTransactionTimeout=60000
client.tm.degradeCheck=false
client.tm.degradeCheckAllowTimes=10
client.tm.degradeCheckPeriod=2000
client.tm.interceptorOrder=-2147482648
client.undo.dataValidation=true
client.undo.logSerialization=jackson
client.undo.onlyCareUpdateColumns=true
server.undo.logSaveDays=7
server.undo.logDeletePeriod=86400000
client.undo.logTable=undo_log
client.undo.compress.enable=true
client.undo.compress.type=zip
client.undo.compress.threshold=64k
#For TCC transaction mode
tcc.fence.logTableName=tcc_fence_log
tcc.fence.cleanPeriod=1h
# You can choose from the following options: fastjson, jackson, gson
tcc.contextJsonParserType=fastjson
#Log rule configuration, for client and server
log.exceptionRate=100
#Transaction storage configuration, only for the server. The file, db, and redis configuration values are optional.
store.mode=redis
store.lock.mode=redis
store.session.mode=redis
#Used for password encryption
store.publicKey=
#If `store.mode,store.lock.mode,store.session.mode` are not equal to `file`, you can remove the configuration block.
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
#These configurations are required if the `store mode` is `db`. If `store.mode,store.lock.mode,store.session.mode` are not equal to `db`, you can remove the configuration block.
store.db.datasource=druid
store.db.dbType=mysql
store.db.driverClassName=com.mysql.jdbc.Driver
store.db.url=jdbc:mysql://127.0.0.1:3306/seata?useUnicode=true&rewriteBatchedStatements=true
store.db.user=username
store.db.password=password
store.db.minConn=5
store.db.maxConn=30
store.db.globalTable=global_table
store.db.branchTable=branch_table
store.db.distributedLockTable=distributed_lock
store.db.vgroupTable=vgroup_table
store.db.queryLimit=100
store.db.lockTable=lock_table
store.db.maxWait=5000
store.db.druid.timeBetweenEvictionRunsMillis=120000
store.db.druid.minEvictableIdleTimeMillis=300000
store.db.druid.testWhileIdle=true
store.db.druid.testOnBorrow=false
store.db.druid.keepAlive=false
store.db.hikari.idleTimeout=600000
store.db.hikari.keepaliveTime=120000
store.db.hikari.maxLifetime=1800000
store.db.hikari.validationTimeout=5000
store.db.dbcp.timeBetweenEvictionRunsMillis=120000
store.db.dbcp.minEvictableIdleTimeMillis=300000
store.db.dbcp.testWhileIdle=true
store.db.dbcp.testOnBorrow=false
#These configurations are required if the `store mode` is `redis`. If `store.mode,store.lock.mode,store.session.mode` are not equal to `redis`, you can remove the configuration block.
store.redis.mode=single
store.redis.type=pipeline
store.redis.single.host=127.0.0.1
store.redis.single.port=6379
store.redis.sentinel.masterName=
store.redis.sentinel.sentinelHosts=
store.redis.sentinel.sentinelPassword=
store.redis.maxConn=10
store.redis.minConn=1
store.redis.maxTotal=100
store.redis.database=0
store.redis.password=Redxun2022redis
store.redis.queryLimit=100
#Transaction rule configuration, only for the server
server.recovery.committingRetryPeriod=1000
server.recovery.asynCommittingRetryPeriod=1000
server.recovery.rollbackingRetryPeriod=1000
server.recovery.endstatusRetryPeriod=1000
server.recovery.timeoutRetryPeriod=1000
server.maxCommitRetryTimeout=-1
server.maxRollbackRetryTimeout=-1
server.rollbackFailedUnlockEnable=false
server.distributedLockExpireTime=10000
server.session.branchAsyncQueueSize=5000
server.session.enableBranchAsyncRemove=false
server.enableParallelRequestHandle=true
server.enableParallelRequestHandle=true
server.retryDeadThreshold=70000
server.applicationDataLimit=64000
server.applicationDataLimitCheck=false
server.raft.server-addr=127.0.0.1:8001,127.0.0.1:8002,127.0.0.1:8003
server.raft.snapshotInterval=600
server.raft.applyBatch=32
server.raft.maxAppendBufferSize=262144
server.raft.maxReplicatorInflightMsgs=256
server.raft.disruptorBufferSize=16384
server.raft.electionTimeoutMs=2000
server.raft.reporterEnabled=false
server.raft.reporterInitialDelay=60
server.raft.serialization=jackson
server.raft.compressor=none
server.raft.sync=true
server.ratelimit.enable=false
server.ratelimit.bucketTokenNumPerSecond = 999999
server.ratelimit.bucketTokenMaxNum = 999999
server.ratelimit.bucketTokenInitialNum = 999999
#Metrics configuration, only for the server
metrics.enabled=false
#metrics.registryType=compact
#metrics.exporterList=prometheus
#metrics.exporterPrometheusPort=9001
console.user.username=seata
console.user.password=seata
console.host=0.0.0.0
console.port=8001
console.enabled=true
这里需要调整的主要是 store 的配置,可以配置为 file,db,seata等。
2.4 调整seata 的配置数据

修改 application.yml 就可以了
seata:
config:
# support: nacos 、 consul 、 apollo 、 zk 、 etcd3
type: nacos
nacos:
server-addr: 127.0.0.1:8848
namespace: local
group: SEATA_GROUP
context-path:
##1.The following configuration is for the open source version of Nacos
username: nacos
password: nacos
data-id: seataServer.properties
registry:
# support: nacos 、 eureka 、 redis 、 zk 、 consul 、 etcd3 、 sofa 、 seata
type: nacos
preferred-networks: 30.240.*
metadata:
weight: 100
nacos:
application: seata-server
server-addr: 127.0.0.1:8848
group: SEATA_GROUP
namespace: local
cluster: default
context-path:
##1.The following configuration is for the open source version of Nacos
username: nacos
password: nacos
注意这里需要调整 nacos 的名称空间 和 地址信息,用户名密码等配置信息。
2.5 启动seata server
seata server 是一个 springboot 程序。

点击启动

2.6 启用seata server 集群
seata 做集群很简单,只需要启动多个seata server 实例就可以。
比如我们在同一台机器启动多个seata server 实例,只需要端口不同就可以。



因为 seata 是共享数据库的,因此 seata server 本身是无状态的,所以生产部署的时候,我们最好使用一个以上的实例。
浙公网安备 33010602011771号