所有文章
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方法就结束了。