elasticsearch源码简读:程序启动

来源:互联网 发布:淘宝租房网 编辑:程序博客网 时间:2024/06/05 12:47
启动类:

1.org.elasticsearch.bootstrap.Elasticsearch

[java] view plain copy
  1. public static void main(String[] args) {  
  2.     Bootstrap.main(args);  
  3. }  
以下具体实现:
1.生成PID文件
2.初始化配置,日志初始化
3.设置是否mlockall,节点配置,在此通过guice依赖注入机制进行模块化加载,加载以下几个模块:
[java] view plain copy
  1. ModulesBuilder modules = new ModulesBuilder();  
  2. modules.add(new Version.Module(version));       //版本模块  
  3. modules.add(new CacheRecyclerModule(settings)); //缓存回收模块  
  4. modules.add(new PageCacheRecyclerModule(settings));//页面缓存回收模块  
  5. modules.add(new CircuitBreakerModule(settings));  //分词模块  
  6. modules.add(new BigArraysModule(settings));         
  7. modules.add(new PluginsModule(settings, pluginsService));//插件模块  
  8. modules.add(new SettingsModule(settings));        //参数配置模块  
  9. modules.add(new NodeModule(this));              //节点模块  
  10. modules.add(new NetworkModule());               //网络模块  
  11. modules.add(new ScriptModule(settings));         //本地脚本模块,支持groovy,mustache,lucene expressions  
  12. modules.add(new EnvironmentModule(environment));//环境模块  
  13. modules.add(new NodeEnvironmentModule(nodeEnvironment));    //节点环境模块  
  14. modules.add(new ClusterNameModule(settings));               //集群名称模块  
  15. modules.add(new ThreadPoolModule(settings));                //线程池模块  
  16. modules.add(new DiscoveryModule(settings));                 //自动发现模块  
  17. modules.add(new ClusterModule(settings));                   //集群模块  
  18. modules.add(new RestModule(settings));                      //rest服务模块  
  19. modules.add(new TransportModule(settings));                 //TCP模块  
  20. if (settings.getAsBoolean(HTTP_ENABLED, true)) {  
  21.     modules.add(new HttpServerModule(settings));    //HTTP服务模块  
  22. }  
  23. modules.add(new RiversModule(settings));            //river模块     
  24. modules.add(new IndicesModule(settings));           //索引模块  
  25. modules.add(new SearchModule());                    //搜索模块  
  26. modules.add(new ActionModule(false));               //action模块  
  27. modules.add(new MonitorModule(settings));          //监控模块  
  28. modules.add(new GatewayModule(settings));          //持久化模块,可用于集群状态恢复  
  29. modules.add(new NodeClientModule());               //节点客户端模块  
  30. modules.add(new BulkUdpModule());                  //UDP批量模块      
  31. modules.add(new ShapeModule());                    //索引模板服务  
  32. modules.add(new PercolatorModule());              //搜索过滤模块  
  33. modules.add(new ResourceWatcherModule());         //资源监控模块  
  34. modules.add(new RepositoriesModule());            //容器模块  
  35. modules.add(new TribeModule());                   //部族模块,允许不同集群互相注册访问  
  36.   
  37. injector = modules.createInjector();  
  38.   
  39. client = injector.getInstance(Client.class);  


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

[java] view plain copy
  1. injector.getInstance(MappingUpdatedAction.class).start();  
  2. injector.getInstance(IndicesService.class).start();  
  3. injector.getInstance(IndexingMemoryController.class).start();  
  4. injector.getInstance(IndicesClusterStateService.class).start();  
  5. injector.getInstance(IndicesTTLService.class).start();  
  6. injector.getInstance(RiversManager.class).start();  
  7. injector.getInstance(SnapshotsService.class).start();  
  8. injector.getInstance(TransportService.class).start();  
  9. injector.getInstance(ClusterService.class).start();  
  10. injector.getInstance(RoutingService.class).start();  
  11. injector.getInstance(SearchService.class).start();  
  12. injector.getInstance(MonitorService.class).start();  
  13. injector.getInstance(RestController.class).start();  
  14. DiscoveryService discoService = injector.getInstance(DiscoveryService.class).start();  
  15. discoService.waitForInitialState();  
  16.   
  17. // gateway should start after disco, so it can try and recovery from gateway on "start"  
  18. injector.getInstance(GatewayService.class).start();  
  19.   
  20. if (settings.getAsBoolean("http.enabled"true)) {  
  21.     injector.getInstance(HttpServer.class).start();  
  22. }  
  23. injector.getInstance(BulkUdpService.class).start();  
  24. injector.getInstance(ResourceWatcherService.class).start();  
  25. injector.getInstance(TribeService.class).start();  


5.启动keepalive线程,使用keepAliveLatch,初始化1,每次调用close时countDown
0 0
原创粉丝点击