presto(五)——服務(wù)入口

繼上一個(gè)系列中: new PrestoServer().run();

@Override
    public void run()
    {
       //讀取系統(tǒng)參數(shù)來(lái)進(jìn)行判斷
        //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();

        //系統(tǒng)時(shí)間判斷是否可以讀的,且大于2015年
        verifySystemTimeIsReasonable();

        //啟動(dòng)日志
        Logger log = Logger.get(PrestoServer.class);

        ImmutableList.Builder<Module> modules = ImmutableList.builder();
        //module 是binding規(guī)范的集合。binding指定類型與具體實(shí)現(xiàn)的對(duì)應(yīng)關(guān)系
        modules.add(
                //節(jié)點(diǎn)信息
                new NodeModule(),
                //發(fā)現(xiàn)服務(wù)模塊
                new DiscoveryModule(),
                //airlife http服務(wù)模塊
                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(),
                //內(nèi)部服務(wù)發(fā)現(xiàn)模塊
                new EmbeddedDiscoveryModule(),
                //服務(wù)安全模塊
                new ServerSecurityModule(),
                //權(quán)限控制模塊
                new AccessControlModule(),
                //事件監(jiān)聽(tīng)模塊(查詢結(jié)束、創(chuàng)建結(jié)束、splite結(jié)束)
                new EventListenerModule(),
                //主要服務(wù)模塊
                new ServerMainModule(sqlParserOptions),
                //優(yōu)雅的關(guān)閉服務(wù)模塊
                new GracefulShutdownModule());

        modules.addAll(getAdditionalModules());

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

        try {
            //此處會(huì)調(diào)用guice框架的ElementsIterator構(gòu)造函數(shù),初始化上面module的configure方法
            //其中configure會(huì)調(diào)用setup方法。這樣綁定注入就算初始化成功
            //讀取配置文件,并打印配置信息
            //包括建立發(fā)現(xiàn)服務(wù)器、連接發(fā)送服務(wù)器的操作
            //重要
            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);
        }

上面的服務(wù)模塊很多,我們將一個(gè)一個(gè)來(lái)看,到底是干什么的?

不妨我們帶著第一個(gè)問(wèn)題來(lái)看代碼:restful api web服務(wù)是怎么起來(lái)的?

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,554評(píng)論 19 139
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,030評(píng)論 25 709
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法,類相關(guān)的語(yǔ)法,內(nèi)部類的語(yǔ)法,繼承相關(guān)的語(yǔ)法,異常的語(yǔ)法,線程的語(yǔ)...
    子非魚(yú)_t_閱讀 34,692評(píng)論 18 399
  • 第一次用簡(jiǎn)書(shū)記錄下自己的習(xí)作 ,老師說(shuō),真正學(xué)美術(shù)那是一個(gè)漫長(zhǎng)的過(guò)程,短時(shí)間不會(huì)有什么效果,也就是說(shuō)看不到拿得出手...
    樂(lè)樂(lè)樂(lè)伽閱讀 218評(píng)論 0 0
  • 第十一篇 前言 我們知道SDWebImageManager是用來(lái)管理圖片下載的,但我們平時(shí)的開(kāi)發(fā)更多的是使用UII...
    老馬的春天閱讀 1,369評(píng)論 0 4

友情鏈接更多精彩內(nèi)容