Seata服务端(TC)源码分析

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

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值