一、seata-server的main启动方法


所有文章

https://www.cnblogs.com/lay2017/p/12485081.html

 

正文

在前面的文章中,我们大体地阅读了一下客户端的代码。本文作为seata-server部分的第一篇文章,将开始阅读Server端的内容。

main方法作为Server的的启动代码的开始部分,所以我们将从main方法开始。

 

Server端的main方法主体逻辑

public static void main(String[] args) throws IOException {
    // 构造参数解析器
    ParameterParser parameterParser = new ParameterParser(args);

    // 初始化指标管理
 MetricsManager.get().init();

    // 设置存储模式系统变量
    System.setProperty(ConfigurationKeys.STORE_MODE, parameterParser.getStoreMode());

    // 构造并初始化一个netty的Server端
    RpcServer rpcServer = new RpcServer(WORKING_THREADS);
    rpcServer.setListenPort(parameterParser.getPort());
    UUIDGenerator.init(parameterParser.getServerNode());
    SessionHolder.init(parameterParser.getStoreMode());

    // 构造并初始化一个分布式事务Coordinator
    DefaultCoordinator coordinator = new DefaultCoordinator(rpcServer);
    coordinator.init();
    // 设置为rpc处理器
    rpcServer.setHandler(coordinator);

    // 注册一个销毁的勾子
    ShutdownHook.getInstance().addDisposable(coordinator);

    // 设置全局IP地址
    if (NetUtil.isValidIp(parameterParser.getHost(), false)) {
        XID.setIpAddress(parameterParser.getHost());
    } else {
        XID.setIpAddress(NetUtil.getLocalIp());
    }
    // 设置全局端口
    XID.setPort(rpcServer.getListenPort());

    try {
        // 初始化RPCServer
 rpcServer.init();
    } catch (Throwable e) {
        // 异常退出JVM
        System.exit(-1);
    }
    // 正常退出JVM
    System.exit(0);
}

seata-server先是初始化了一个指标管理器,该指标管理器采用SPI机制选择实现。根据官方说法,不采用spring机制就是为了减少更多的依赖冲突的可能。

而后,采用netty做网络服务构造RpcServer

再接着是关于分布式事务模型中非常重要的Coordinator协调者的构造,并设置为RpcServer的handler,接入网络服务。

最后,执行RpcServer的init方法,整个main方法就结束了。

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM