• 一、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方法就结束了。

  • 相关阅读:
    装饰器
    函数对象与闭包
    名称空间与作用域
    函数的参数
    函数的基本使用
    ${}与#{}的区别
    thymeleaf之日期格式化
    template might not exist or might not be accessible by any of the configured Template Resolvers
    springboot使用@Scheduled之cron表达式详解
    自定义springboot项目启动图案
  • 原文地址:https://www.cnblogs.com/lay2017/p/12497676.html
Copyright © 2020-2023  润新知