问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

elasticsearch 怎么用源码启动 调试

发布网友 发布时间:2022-04-24 05:54

我来回答

1个回答

热心网友 时间:2023-10-04 05:24

脚本内容不再赘述,java主类位于org.elasticsearch.bootstrap。主要逻辑是生成了一个InternalNode节点,并且启动了一个keepalive线程。结点的启动代表整个es进程启动了。
InternalNode节点是通过NodeBuilder来生成的,节点在构造函数中通过MoleBuilder类来进行模块的注入(是对Guice的一个封装而已),同时生成injector实例,如下

MolesBuilder moles = new MolesBuilder();
moles.add(new Version.Mole(version));
moles.add(new CacheRecyclerMole(settings));
moles.add(new PageCacheRecyclerMole(settings));
moles.add(new BigArraysMole(settings));
moles.add(new PluginsMole(settings, pluginsService));
moles.add(new SettingsMole(settings));
moles.add(new NodeMole(this));
moles.add(new NetworkMole());
moles.add(new ScriptMole(settings));
moles.add(new EnvironmentMole(environment));
moles.add(new NodeEnvironmentMole(nodeEnvironment));
moles.add(new ClusterNameMole(settings));
moles.add(new ThreadPoolMole(settings));
moles.add(new DiscoveryMole(settings));
moles.add(new ClusterMole(settings));
moles.add(new RestMole(settings));
moles.add(new TransportMole(settings));
if (settings.getAsBoolean("http.enabled", true)) {
moles.add(new HttpServerMole(settings));
}
moles.add(new RiversMole(settings));
moles.add(new IndicesMole(settings));
moles.add(new SearchMole());
moles.add(new ActionMole(false));
moles.add(new MonitorMole(settings));
moles.add(new GatewayMole(settings));
moles.add(new NodeClientMole());
moles.add(new BulkUdpMole());
moles.add(new ShapeMole());
moles.add(new PercolatorMole());
moles.add(new ResourceWatcherMole());
moles.add(new RepositoriesMole());
moles.add(new TribeMole());
injector = moles.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注释,并对方法中出现的参数实例寻找对应注册的实例进行初始化。

热心网友 时间:2023-10-04 05:24

脚本内容不再赘述,java主类位于org.elasticsearch.bootstrap。主要逻辑是生成了一个InternalNode节点,并且启动了一个keepalive线程。结点的启动代表整个es进程启动了。
InternalNode节点是通过NodeBuilder来生成的,节点在构造函数中通过MoleBuilder类来进行模块的注入(是对Guice的一个封装而已),同时生成injector实例,如下

MolesBuilder moles = new MolesBuilder();
moles.add(new Version.Mole(version));
moles.add(new CacheRecyclerMole(settings));
moles.add(new PageCacheRecyclerMole(settings));
moles.add(new BigArraysMole(settings));
moles.add(new PluginsMole(settings, pluginsService));
moles.add(new SettingsMole(settings));
moles.add(new NodeMole(this));
moles.add(new NetworkMole());
moles.add(new ScriptMole(settings));
moles.add(new EnvironmentMole(environment));
moles.add(new NodeEnvironmentMole(nodeEnvironment));
moles.add(new ClusterNameMole(settings));
moles.add(new ThreadPoolMole(settings));
moles.add(new DiscoveryMole(settings));
moles.add(new ClusterMole(settings));
moles.add(new RestMole(settings));
moles.add(new TransportMole(settings));
if (settings.getAsBoolean("http.enabled", true)) {
moles.add(new HttpServerMole(settings));
}
moles.add(new RiversMole(settings));
moles.add(new IndicesMole(settings));
moles.add(new SearchMole());
moles.add(new ActionMole(false));
moles.add(new MonitorMole(settings));
moles.add(new GatewayMole(settings));
moles.add(new NodeClientMole());
moles.add(new BulkUdpMole());
moles.add(new ShapeMole());
moles.add(new PercolatorMole());
moles.add(new ResourceWatcherMole());
moles.add(new RepositoriesMole());
moles.add(new TribeMole());
injector = moles.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注释,并对方法中出现的参数实例寻找对应注册的实例进行初始化。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
怀孕甲状腺激素偏高正常吗 怀孕检查甲状腺素偏高是什么原因引起的 怀孕了甲状腺功能偏高是怎么回事 怀孕甲状腺高是什么引起的 孕中期促甲状腺激素偏高是什么原因 重钢别墅靠谱吗 重刚别墅的致命缺点 重钢别墅的优点和缺点各是什么 积食可以吃什么 车子换了点火线圈,分缸线,火花塞以后车子打不着。这是什么原因 如何导入 Maven 依赖关系在 Android studio/IntelliJ 求助 导入maven android工程 springboot gradle 怎么启动 spring data jpa + spring mvc的事务控制问题 谁知道宁夏幼师资格证的考试时间。。。 宁夏幼师资格证下半年啥时候报考,考不考心理教育学 2015宁夏报考教师资格证有年龄限制吗? 宁夏考生报考教师资格证有年龄限制吗? 各位我想问一下宁夏报考幼师资格证必须是具备幼儿师范毕业或者中等师范毕业才能报名吗?非师范毕业不能报 急求!!怎么进入网站后台?? 怎样进入网站的后台管理系统? 酒店装修细节注意事项有哪些 怎样进入网站后台? 怎样才可以登陆一个网站后台 酒店墙面装饰用什么材料好 装修材料介绍 咖喱鱼蛋的做法? 酒店装修包括哪些内容 做咖喱鱼丸可不可以不用椰浆?不用会怎样么?求帮忙啊 如何知道网站登录后台? 咖喱鱼蛋怎么做啊? word小窗口目录怎么显示 创建java项目的步骤 帮助翻译一下,着急使用,谢谢,拒绝机器翻译 spring4中文文档哪里有 《ImplementingDomain-DrivenDesign》pdf下载在线阅读,求百度网盘云资源 如何导入 Maven 依赖关系在 Android 工作室/IntelliJ Github 为什么开放了一套 GraphQL 版本的 API 有关于VOD视频点播系统的英文文献,最好基于校园网 9.1surface restmill怎么用 spring boot 怎么创建web 吃什么东西能减脂肪 吃什么食物可以脱脂(脂肪)? 吃什么代谢脂肪最快 吃什么东西减脂肪最快? 吃什么东西消脂最快? 吃什么脂肪燃烧最快 吃什么能最快降脂肪 吃什么食物燃烧脂肪最快 吃什么东西减脂肪? 吃什么可以快速消除身体上的脂肪!!!