美文网首页
presto(五)——服务入口

presto(五)——服务入口

作者: hello高world | 来源:发表于2017-03-13 22:56 被阅读0次

继上一个系列中: new PrestoServer().run();

@Override
    public void run()
    {
       //读取系统参数来进行判断
        //Presto requires an Oracle or OpenJDK JVM
        //Presto requires Java 8u60+
        //Presto requires a 64-bit JVM
        //Presto requires x86-64 or amd64 on Linux
        //Presto requires x86_64 on Mac OS X
        //Presto requires Linux or Mac OS X
        //Presto requires a little endian platform
        //Presto recommends the G1 garbage collector.
        //Presto recommends at least maxFileDescriptorCount=8192
        //检查切片
        //verifyJvmRequirements();

        //系统时间判断是否可以读的,且大于2015年
        verifySystemTimeIsReasonable();

        //启动日志
        Logger log = Logger.get(PrestoServer.class);

        ImmutableList.Builder<Module> modules = ImmutableList.builder();
        //module 是binding规范的集合。binding指定类型与具体实现的对应关系
        modules.add(
                //节点信息
                new NodeModule(),
                //发现服务模块
                new DiscoveryModule(),
                //airlife http服务模块
                new HttpServerModule(),
                //airlife Json模块
                new JsonModule(),
                //java API for restful 模块
                new JaxrsModule(true),
                //被管理的bean模块
                new MBeanModule(),
                //Jmx模块
                new JmxModule(),
                //基于Http管理MBean的Jmx模块
                new JmxHttpModule(),
                //日志Jmx模块
                new LogJmxModule(),
                //跟踪tokenid模块
                new TraceTokenModule(),
                new JsonEventModule(),
                new HttpEventModule(),
                //内部服务发现模块
                new EmbeddedDiscoveryModule(),
                //服务安全模块
                new ServerSecurityModule(),
                //权限控制模块
                new AccessControlModule(),
                //事件监听模块(查询结束、创建结束、splite结束)
                new EventListenerModule(),
                //主要服务模块
                new ServerMainModule(sqlParserOptions),
                //优雅的关闭服务模块
                new GracefulShutdownModule());

        modules.addAll(getAdditionalModules());

        Bootstrap app = new Bootstrap(modules.build());

        try {
            //此处会调用guice框架的ElementsIterator构造函数,初始化上面module的configure方法
            //其中configure会调用setup方法。这样绑定注入就算初始化成功
            //读取配置文件,并打印配置信息
            //包括建立发现服务器、连接发送服务器的操作
            //重要
            Injector injector = app.strictConfig().initialize();

            //加载plugin目录下的插件
            injector.getInstance(PluginManager.class).loadPlugins();

            //加载catalog目录下的properties文件
            injector.getInstance(StaticCatalogStore.class).loadCatalogs();

            // TODO: remove this huge hack
            updateConnectorIds(
                    injector.getInstance(Announcer.class),
                    injector.getInstance(CatalogManager.class),
                    injector.getInstance(ServerConfig.class),
                    injector.getInstance(NodeSchedulerConfig.class));

            injector.getInstance(ResourceGroupManager.class).loadConfigurationManager();
            injector.getInstance(AccessControlManager.class).loadSystemAccessControl();
            injector.getInstance(EventListenerManager.class).loadConfiguredEventListener();

            injector.getInstance(Announcer.class).start();

            log.info("======== SERVER STARTED ========");
        }
        catch (Throwable e) {
            log.error(e);
            System.exit(1);
        }

上面的服务模块很多,我们将一个一个来看,到底是干什么的?

不妨我们带着第一个问题来看代码:restful api web服务是怎么起来的?

相关文章

网友评论

      本文标题:presto(五)——服务入口

      本文链接:https://www.haomeiwen.com/subject/zbqywttx.html