启动类:
以下具体实现:
1.生成PID文件
2.初始化配置,日志初始化
3.设置是否mlockall,节点配置,在此通过guice依赖注入机制进行模块化加载,加载以下几个模块:
5.启动keepalive线程,使用keepAliveLatch,初始化1,每次调用close时countDown
1.org.elasticsearch.bootstrap.Elasticsearch
[java]
view plain
copy
- 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