前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >图个源码系列 · 一步步注释eureka Server启动的核心初始化

图个源码系列 · 一步步注释eureka Server启动的核心初始化

作者头像
简熵
发布2023-03-06 21:42:25
1650
发布2023-03-06 21:42:25
举报
文章被收录于专栏:逆熵逆熵

前文讲解了Eureka源码的项目结构,环境初始化以及配置相关的一些源码,本文我们将通过一步步注释,继续分析eureka server在容器启动之后一系列初始化相关的核心源码,本文主要将流程梳理清楚,细节代码将在后面文章中依次讨论。

1、初始化EurekaServerContext

先大概回忆一下,在容器启动之后,先是通过ConfigurationManager组件读取了一些配置,并且读取并初始化了一些环境和数据中心相关的配置信息。

接下来,就是比较很重要的一段初始化流程。入口就是下面的这个关键的一行代码,我们开始今天的源码分析。

顾名思义,初始化eureka server的上线文对象,对于任何系统或者中间件系统来说上下文对象都是最核心、最重要的,一般都会持有大量核心的组件,在系统运转的各个地方都可以随时获取,并且通过上下文获取到自己想要的组件或者一些对象。,这里也不例外。

分析

1.首先读取eureka-server.properties文件,创建了eureka-server配置对象,持有大量的配置属性的DefaultEurekaServerConfig类。

2.创建http通信编解码组件,server与server,client与server之间通信进行通信时,进行请求和响应的编解码处理。

代码语言:javascript
复制
//第一步 初始化eureka-server配置
EurekaServerConfig eurekaServerConfig = new DefaultEurekaServerConfig();
ServerCodecs serverCodecs = new DefaultServerCodecs(eurekaServerConfig);

3.创建并初始化服务实例管理器组件ApplicationInfoManager,传入服务实例配置信息,并且初始化创建了服务实例对象InstanceInfo对象传入。这个组件主要是管理服务实例的一些配置信息,状态,监听实例的状态变化。

代码语言:javascript
复制
applicationInfoManager = new ApplicationInfoManager(
  instanceConfig, 
new EurekaConfigBasedInstanceInfoProvider(instanceConfig).get());

技术亮点InstanceInfo对象的构造使用了构造器模式,我们在源码的学习过程中去发现和学习一些设计比较好的实现。

4.创建持有大量客户端配置的client配置类,eurekaclient实现类DiscoveryClient,这个对象也就是后面进行注册,拉取注册表,心跳等发起者。

代码语言:javascript
复制
EurekaClientConfig eurekaClientConfig = new DefaultEurekaClientConfig();
eurekaClient = new DiscoveryClient(applicationInfoManager, eurekaClientConfig);

5.创建eureka server系统核心中的核心-注册中心表对象,注册表可以感知到所有服务实例的信息,针对客户端的注册,下线,故障,心跳等各种请求,最终,服务实例的变化都会体现到注册表中。

代码语言:javascript
复制
registry = new PeerAwareInstanceRegistryImpl(
eurekaServerConfig,
eurekaClient.getEurekaClientConfig(),
serverCodecs,
eurekaClient
);

6. 创建代表集群节点的对象,其中每一个PeerEurekaNode就代表一个eureka server.这个组件会去维护好整个集群中eureka server节点的生命周期,包括增加机器,减少机器的识别。

代码语言:javascript
复制
PeerEurekaNodes peerEurekaNodes = getPeerEurekaNodes(
registry,
eurekaServerConfig,
eurekaClient.getEurekaClientConfig(),
serverCodecs,
applicationInfoManager
);

7.最后,基于上面几步创建的对象来构建最终的终极boss-上下文对象EurekaServerContext。对上下文对象进行了初始化,这里我们简单说说,一旦初始化回去启动集群server同步的定时任务,还有注册表相关的一些初始化操作。这个我们后面会单独去看。

代码语言:javascript
复制
serverContext = new DefaultEurekaServerContext(
eurekaServerConfig,
serverCodecs,
registry,
peerEurekaNodes,
applicationInfoManager
);
serverContext.initialize();

8.注册表同步,监控注册等操作,这个我们后面看细节的时候讨论。

代码语言:javascript
复制
int registryCount = registry.syncUp();    
registry.openForTraffic(applicationInfoManager, registryCount);
EurekaMonitors.registerAllStats();    

02

总结

今日主要是分析了eureka server启动初始化中上下文对象的创建,对于其中的很多细节代码,核心流程,没有展开,我们后面会一个个单独剖开来讲解,学习eureka源码设计中一些比较好的机制,例如他的注册表缓存机制,他的server间数据同步采用异步三层队列批处理机制等等。最后,谢谢大家观看。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-02-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 逆熵架构 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档