elasticsearch源码简读:程序启动

启动类:

1.org.elasticsearch.bootstrap.Elasticsearch

2.org.elasticsearch.bootstrap.ElasticsearchF,前台运行类,es.foreground=yes,否则不打印系统日志
两个类都继承Bootstrap

    public static void main(String[] args) {
        Bootstrap.main(args);
    }

以下具体实现:
1.生成PID文件
2.初始化配置,日志初始化
3.设置是否mlockall,节点配置,在此通过guice依赖注入机制进行模块化加载,加载以下几个模块:

            ModulesBuilder modules = new ModulesBuilder();
            modules.add(new Version.Module(version));       //版本模块
            modules.add(new CacheRecyclerModule(settings)); //缓存回收模块
            modules.add(new PageCacheRecyclerModule(settings));//页面缓存回收模块
            modules.add(new CircuitBreakerModule(settings));  //分词模块
            modules.add(new BigArraysModule(settings));       
            modules.add(new PluginsModule(settings, pluginsService));//插件模块
            modules.add(new SettingsModule(settings));        //参数配置模块
            modules.add(new NodeModule(this));              //节点模块
            modules.add(new NetworkModule());               //网络模块
            modules.add(new ScriptModule(settings));         //本地脚本模块,支持groovy,mustache,lucene expressions
            modules.add(new EnvironmentModule(environment));//环境模块
            modules.add(new NodeEnvironmentModule(nodeEnvironment));    //节点环境模块
            modules.add(new ClusterNameModule(settings));               //集群名称模块
            modules.add(new ThreadPoolModule(settings));                //线程池模块
            modules.add(new DiscoveryModule(settings));                 //自动发现模块
            modules.add(new ClusterModule(settings));                   //集群模块
            modules.add(new RestModule(settings));                      //rest服务模块
            modules.add(new TransportModule(settings));                 //TCP模块
            if (settings.getAsBoolean(HTTP_ENABLED, true)) {
                modules.add(new HttpServerModule(settings));    //HTTP服务模块
            }
            modules.add(new RiversModule(settings));            //river模块   
            modules.add(new IndicesModule(settings));           //索引模块
            modules.add(new SearchModule());                    //搜索模块
            modules.add(new ActionModule(false));               //action模块
            modules.add(new MonitorModule(settings));          //监控模块
            modules.add(new GatewayModule(settings));          //持久化模块,可用于集群状态恢复
            modules.add(new NodeClientModule());               //节点客户端模块
            modules.add(new BulkUdpModule());                  //UDP批量模块    
            modules.add(new ShapeModule());                    //索引模板服务
            modules.add(new PercolatorModule());              //搜索过滤模块
            modules.add(new ResourceWatcherModule());         //资源监控模块
            modules.add(new RepositoriesModule());            //容器模块
            modules.add(new TribeModule());                   //部族模块,允许不同集群互相注册访问

            injector = modules.createInjector();

            client = injector.getInstance(Client.class);

4.启动节点,节点启动时为各个模块加载实例,如下:

        injector.getInstance(MappingUpdatedAction.class).start();
        injector.getInstance(IndicesService.class).start();
        injector.getInstance(IndexingMemoryController.class).start();
        injector.getInstance(IndicesClusterStateService.class).start();
        injector.getInstance(IndicesTTLService.class).start();
        injector.getInstance(RiversManager.class).start();
        injector.getInstance(SnapshotsService.class).start();
        injector.getInstance(TransportService.class).start();
        injector.getInstance(ClusterService.class).start();
        injector.getInstance(RoutingService.class).start();
        injector.getInstance(SearchService.class).start();
        injector.getInstance(MonitorService.class).start();
        injector.getInstance(RestController.class).start();
        DiscoveryService discoService = injector.getInstance(DiscoveryService.class).start();
        discoService.waitForInitialState();

        // gateway should start after disco, so it can try and recovery from gateway on "start"
        injector.getInstance(GatewayService.class).start();

        if (settings.getAsBoolean("http.enabled", true)) {
            injector.getInstance(HttpServer.class).start();
        }
        injector.getInstance(BulkUdpService.class).start();
        injector.getInstance(ResourceWatcherService.class).start();
        injector.getInstance(TribeService.class).start();

5.启动keepalive线程,使用keepAliveLatch,初始化1,每次调用close时countDown

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值