Seata服务端(TC)源码分析
1. TC介绍
Seata是由TM,RM,TC。 其中TM和RM是在客户端,TC是事务协调者是需要单独部署的服务端。
- TC (Transaction Coordinator) - 事务协调者 维护全局和分支事务的状态,驱动全局事务提交或回滚。
- TM (Transaction Manager) - 事务管理器(发起者,同时也是RM的一种) 定义全局事务的范围:开始全局事务、提交或回滚全局事务。
- RM (Resource Manager) - 资源管理器(每个参与事务的微服务) 管理分支事务处理的资源,与TC交谈以注册分支事务和报告分支事务的状态,并驱动分支事务提交或回滚。
2. TC服务入口
TC是一个Spring Boot应用,单独部署的,所以和其他的springboot应用一样,会有一个main函数作为启动入口。

这里我们看Server.java这里就是启动入口,在这个入口中找到协调者,因为TC整体的操作就是协调整体的全局事务
public static void main(String[] args) throws IOException {
// 通过线程池去接收请求
ThreadPoolExecutor workingThreads = new ThreadPoolExecutor(NettyServerConfig.getMinServerPoolSize(),
NettyServerConfig.getMaxServerPoolSize(), NettyServerConfig.getKeepAliveTime(), TimeUnit.SECONDS,
new LinkedBlockingQueue<>(NettyServerConfig.getMaxTaskQueueSize()),
new NamedThreadFactory("ServerHandlerThread", NettyServerConfig.getMaxServerPoolSize()),
new ThreadPoolExecutor.CallerRunsPolicy());
//通过Netty去接收请求
NettyRemotingServer nettyRemotingServer = new NettyRemotingServer(workingThreads);
...
//通过DefaultCoordinator来处理各种请求
DefaultCoordinator coordinator = new DefaultCoordinator(nettyRemotingServer);
...
//初始化Server
nettyRemotingServer.init();
...
//主线程不退出
System.exit(0);
}
3. 事务协调器
从代码看出DefaultCoordinator就是事务协调器了,也是用来处理各种事务请求的
public class DefaultCoordinator extends AbstractTCInboundHandler implements TransactionMessageHandler, Disposable {
...
@Override
protected void doGlobalBegin(GlobalBeginRequest request, GlobalBeginResponse response, RpcContext rpcContext)
throws TransactionException {
...
//开始全局事务
}
@Override
protected void doGlobalCommit(GlobalCommitRequest request, Global

本文深入分析Seata事务协调器(TC)的源码,从服务启动、事务管理、全局事务创建等方面阐述其工作原理。TC通过Netty接收请求,使用DefaultCoordinator处理事务操作,如开始、提交、回滚全局事务,并通过DataBaseSessionManager持久化全局事务状态到数据库。
1万+

被折叠的 条评论
为什么被折叠?



