Elasticsearch源码分析(一)启动流程 ModuleBuilder injector
http://blog.csdn.net/u010994304/article/details/50452890
es启动脚本是bin目录下的elasticsearch。
脚本内容不再赘述,java主类位于org.elasticsearch.bootstrap。主要逻辑是生成了一个InternalNode节点,并且启动了一个keepalive线程。结点的启动代表整个es进程启动了。
InternalNode节点是通过NodeBuilder来生成的,节点在构造函数中
通过ModuleBuilder类来进行模块的注入(是对Guice的一个封装而已),同时生成injector实例,如下
- ModulesBuilder modules = new ModulesBuilder();
- modules.add(new Version.Module(version));
- modules.add(new CacheRecyclerModule(settings));
- modules.add(new PageCacheRecyclerModule(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));
- 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));
- modules.add(new TransportModule(settings));
- if (settings.getAsBoolean("http.enabled", true)) {
- modules.add(new HttpServerModule(settings));
- }
- modules.add(new RiversModule(settings));
- modules.add(new IndicesModule(settings));
- modules.add(new SearchModule());
- modules.add(new ActionModule(false));
- modules.add(new MonitorModule(settings));
- modules.add(new GatewayModule(settings));
- modules.add(new NodeClientModule());
- modules.add(new BulkUdpModule());
- modules.add(new ShapeModule());
- modules.add(new PercolatorModule());
- modules.add(new ResourceWatcherModule());
- modules.add(new RepositoriesModule());
- modules.add(new TribeModule());
- injector = modules.createInjector();
在InternalNode的start方法中,用injector对各个模块完成启动,各自负责各自的功能,如下:
- injector.getInstance(Discovery.class).setAllocationService(injector.getInstance(AllocationService.class));
- for (Class<? extends LifecycleComponent> plugin : pluginsService.services()) {
- injector.getInstance(plugin).start();
- }
- 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(ClusterService.class).start();
- injector.getInstance(RoutingService.class).start();
- injector.getInstance(SearchService.class).start();
- injector.getInstance(MonitorService.class).start();
- injector.getInstance(RestController.class).start();
- injector.getInstance(TransportService.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();
至此,es进程启动完毕。
guice相关介绍可以参见以下链接:
关键点在于:
@inject注释---guice会扫描inject注释,并对方法中出现的参数实例寻找对应注册的实例进行初始化。
bind接口-----将接口跟具体实现类绑定
Elasticsearch源码分析(一)启动流程 ModuleBuilder injector的更多相关文章
- SpringMVC源码分析和启动流程
https://yq.aliyun.com/articles/707995 在Spring的web容器启动时会去读取web.xml文件,相关启动顺序为:<context-param> -- ...
- Appium Android Bootstrap源码分析之启动运行
通过前面的两篇文章<Appium Android Bootstrap源码分析之控件AndroidElement>和<Appium Android Bootstrap源码分析之命令解析 ...
- Elasticsearch源码分析 - 源码构建
原文地址:https://mp.weixin.qq.com/s?__biz=MzU2Njg5Nzk0NQ==&mid=2247483694&idx=1&sn=bd03afe5a ...
- Linux内核源码分析--内核启动之(6)Image内核启动(do_basic_setup函数)(Linux-3.0 ARMv7)【转】
原文地址:Linux内核源码分析--内核启动之(6)Image内核启动(do_basic_setup函数)(Linux-3.0 ARMv7) 作者:tekkamanninja 转自:http://bl ...
- u-boot 源码分析(1) 启动过程分析
u-boot 源码分析(1) 启动过程分析 文章目录 u-boot 源码分析(1) 启动过程分析 前言 配置 源码结构 api arch board common cmd drivers fs Kbu ...
- Appium Server 源码分析之启动运行Express http服务器
通过上一个系列Appium Android Bootstrap源码分析我们了解到了appium在安卓目标机器上是如何通过bootstrap这个服务来接收appium从pc端发送过来的命令,并最终使用u ...
- Linux内核源码分析--内核启动之(3)Image内核启动(C语言部分)(Linux-3.0 ARMv7)
http://blog.chinaunix.net/uid-20543672-id-3157283.html Linux内核源码分析--内核启动之(3)Image内核启动(C语言部分)(Linux-3 ...
- Linux内核源码分析--内核启动之(4)Image内核启动(setup_arch函数)(Linux-3.0 ARMv7)【转】
原文地址:Linux内核源码分析--内核启动之(4)Image内核启动(setup_arch函数)(Linux-3.0 ARMv7) 作者:tekkamanninja 转自:http://blog.c ...
- nodejs的Express框架源码分析、工作流程分析
nodejs的Express框架源码分析.工作流程分析 1.Express的编写流程 2.Express关键api的使用及其作用分析 app.use(middleware); connect pack ...
随机推荐
- HDOJ.2037 今年暑假不AC (贪心)
今年暑假不AC 点我挑战此题 题意分析 给出来n组节目的起止时间,让求出所最多能观看的完整节目个数. 贪心策略:按照节目的结束时间升序排序,比较下一项的开始时间是否比上一项的结束时间大,是的话计数器+ ...
- 【BZOJ 2322】[BeiJing2011]梦想封印 利用"环基"+线性基特征值
很容易想到离线加边并且把环和链拆开搞(就是对于每个终点求出起点到他的路径(其实就是dfs树),然后bzoj2115),而且维护也很简单,然而我们发现不同的终点可能得到相同的值,这就是我们遇到的最大的问 ...
- MyEclipse下项目的包层次结构调整
新电脑安装完MyEclipse,导入项目后发现MyEclipse下项目的包层次结构变成了Flat,平面模式,这种模式感觉特别不好, 不能清晰地显示出项目的包层次结构.这样,显示出的包的结构不够明显,我 ...
- Codeforces Round #345 (Div. 2) C (multiset+pair )
C. Watchmen time limit per test 3 seconds memory limit per test 256 megabytes input standard input o ...
- bzoj 3252 攻略 长链剖分思想+贪心
攻略 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 889 Solved: 423[Submit][Status][Discuss] Descrip ...
- bzoj 4831 [Lydsy1704月赛]序列操作 dp
[Lydsy1704月赛]序列操作 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 203 Solved: 69[Submit][Status][Dis ...
- CMDB资产管理系统开发【day27】:cmdb API安全认证
1.API验证分析 API三关验证 客户端和服务端中都存放一份相同的随机字符串,客户端发请求的时候把随机字符串和当前时间进行MD5加密,同时带着当前时间通过请求头发送到API,进入三关验证. 第一关是 ...
- 动态规划小结 - 一维动态规划 - 时间复杂度 O(n),题 [LeetCode] Jump Game,Decode Ways
引言 一维动态规划根据转移方程,复杂度一般有两种情况. func(i) 只和 func(i-1)有关,时间复杂度是O(n),这种情况下空间复杂度往往可以优化为O(1) func(i) 和 func(1 ...
- ZooKeeper管理员指南(九)
部署 这部分包含了部署ZooKeeper的信息和覆盖这些话题 系统要求 集群(多服务)安装 单服务和开发者安装 前两部分假定你对在例如数据中心的生产环境安装ZooKeeper有兴趣.最后一部分包含你在 ...
- LightOJ 1341 - Aladdin and the Flying Carpet 基本因子分解
http://www.lightoj.com/volume_showproblem.php?problem=1341 题意:给你长方形的面积a,边最小为b,问有几种情况. 思路:对a进行素因子分解,再 ...