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 的配置数据

image

修改 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 程序。

image

点击启动

image

2.6 启用seata server 集群

seata 做集群很简单,只需要启动多个seata server 实例就可以。

比如我们在同一台机器启动多个seata server 实例,只需要端口不同就可以。

image

image

image

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

posted on 2025-09-16 09:32  自由港  阅读(62)  评论(0)    收藏  举报