本地运行Seata的步骤指南¶
1. 获取Seata源码¶
2. 构建项目¶
使用Maven构建项目:
这将在target目录下生成seata-server.jar文件。
3. 启动Seata服务器¶
服务器启动有三种方式:
基本启动(使用默认配置)¶
使用参数启动¶
常用参数说明¶
--host,-h: 注册到注册中心的IP地址--port,-p: 监听端口,默认为0--storeMode,-m: 日志存储模式(file, db, redis)--sessionStoreMode,-ssm: 会话日志存储模式(file, db, redis)--lockStoreMode,-lsm: 锁存储模式(file, db, redis)--serverNode,-n: 服务器节点ID--seataEnv,-e: 多配置隔离环境名称
4. 管理服务器¶
5. 查看日志¶
服务启动后,可查看日志目录下的日志文件:
日志目录位置可在配置文件中查看,通常在项目目录的logs文件夹中。
注意:启动前请确保已正确配置了conf目录下的配置文件,包括application.yml和logback-spring.xml等。
Seata源码分析入手指南¶
1. 从整体架构开始¶
先了解Seata的三大角色: - TC (Transaction Coordinator): 事务协调者 - TM (Transaction Manager): 事务管理器 - RM (Resource Manager): 资源管理器
2. 从启动入口分析¶
从io.seata.server.Server类开始,这是Seata服务端的启动入口:
3. 核心模块分析顺序¶
3.1 协调器模块 (TC)¶
3.2 事务处理流程¶
io.seata.server.session.GlobalSession
io.seata.server.session.BranchSession
io.seata.core.model.GlobalStatus
3.3 事务管理器模块 (TM)¶
io.seata.tm.api.GlobalTransactionContext
io.seata.tm.api.GlobalTransaction
io.seata.tm.DefaultTransactionManager
3.4 资源管理器模块 (RM)¶
4. 存储模块¶
分析三种存储模式实现:
io.seata.core.store.db.DatabaseTransactionStoreManager
io.seata.core.store.file.FileTransactionStoreManager
io.seata.core.store.redis.RedisTransactionStoreManager
5. 通信模块¶
6. 事务隔离与锁机制¶
7. 常用切面和注解实现¶
8. 调试方法¶
- 在主方法设置断点:
io.seata.server.Server.main() - 创建一个简单的分布式事务测试用例
- 通过跟踪关键调用链路了解完整流程
理解Seata源码的关键是把握"全局事务→分支事务→资源锁定→二阶段提交/回滚"的核心流程。
本地编译的时候如果遇到protobuf文件不存在则在指定模块运行如下命令
mvn clean compile -Pgen-protobuf
在 IDEA 中,将生成的代码目录标记为源码目录:
右键点击 seata-core/target/generated-sources/protobuf/java 选择 "Mark Directory as" → "Generated Sources Root"
编译完成后运行seata模块的如下类型的main方法org.apache.seata.server.ServerRunner