【一起学源码-微服务】Nexflix Eureka 源码四:EurekaServer启动之完成上下文构建及EurekaServer总结
前言
上篇文章已经介绍了 Eureka Server上下文创建相关的Eureka Client逻辑,这一部分还是比较复杂的。接下来就讲解下Eureka Server上下文初始化最后的部分,然后加上整个Eureka Server启动的总结。
如若转载 请标明来源:一枝花算不算浪漫
initEurekaServerContext
EurekaBootStrap.initEurekaServerContext
protected void initEurekaServerContext() throws Exception {
	// 省略之前内容
    // 3、处理注册相关的事情  下面是拆解单词加深理解:
	// PeerAware:可以识别eureka server集群的。多个同样的东西组成一个集群,peers:集群,peer就是集群中的一个实例
	// InstanceRegistry:实例注册,服务实例注册。注册表,这个里面放了所有的主车道这个eureka server上的服务实例,就是一个服务实例的注册表。
	// PeerAwareInstanceRegistry:可以感知eureka server集群的服务实例注册表,eureka client(作为服务实例)过来注册的注册表,而且这个注册表是可以感知到eureka
	// server集群的,假如有一个eureka server集群的话,这里包含了其他eureka server中的服务实例注册表信息的。
    PeerAwareInstanceRegistry registry;
    if (isAws(applicationInfoManager.getInfo())) {
        registry = new AwsInstanceRegistry(
                eurekaServerConfig,
                eurekaClient.getEurekaClientConfig(),
                serverCodecs,
                eurekaClient
        );
        awsBinder = new AwsBinderDelegate(eurekaServerConfig, eurekaClient.getEurekaClientConfig(), registry, applicationInfoManager);
        awsBinder.start();
    } else {
    	// 创建PeerAwareInstanceRegistry。最近取消的实例,最近注册的实例都会保存到registry中
        registry = new PeerAwareInstanceRegistryImpl(
                eurekaServerConfig,
                eurekaClient.getEurekaClientConfig(),
                serverCodecs,
                eurekaClient
        );
    }
    // 4、处理peer节点相关的事情
	// peerEurekaNodes 代表了eureka server集群,peers大概来说是多个相同的实例组成的一个集群,peer就是peers中的一个实例
	// PeerEurekaNodes,代表的是eureka server集群
    PeerEurekaNodes peerEurekaNodes = getPeerEurekaNodes(
            registry,
            eurekaServerConfig,
            eurekaClient.getEurekaClientConfig(),
            serverCodecs,
            applicationInfoManager
    );
    // 5、完成eureka-server上下文(context)的构建及初始化
    serverContext = new DefaultEurekaServerContext(
            eurekaServerConfig,
            serverCodecs,
            registry,
            peerEurekaNodes,
            applicationInfoManager
    );
    // 将上下文信息放到holder中
    EurekaServerContextHolder.initialize(serverContext);
    // 将eureka server集群启动起来。里面会更新eureka server集群的信息,让当前的eureka server感知到所有的其他eureka server
	// 然后搞一个定时调度任务,就是一个后台线程,每隔一段时间,更新eureka server集群的信息
	// registry.init: 基于eureka server集群的信息,来初始化注册表,将eureka server集群中所有的eureka
	// server的注册表信息抓取过来,放到自己本地的注册表中。都是跟eureka server集群中之间的注册表信息互换有关联的
    serverContext.initialize();
    logger.info("Initialized server context");
    // Copy registry from neighboring eureka node
	// 6、处理一些善后的事情,从相邻的eureka节点拷贝注册信息
	// registry.syncUp(): 从相邻的一个eureka server节点拷贝注册表信息,如果拷贝失败,就找下一个
    int registryCount = registry.syncUp();
    registry.openForTraffic(applicationInfoManager, registryCount);
    // Register all monitoring statistics.
	// 7、注册所有的监控统计项
    EurekaMonitors.registerAllStats();
}
这里备注比较多,基本上是每个方法 实现的目的,并没有进一步跟踪细节问题,还是之前讲到的,看源码还是要抓大放小,我们尽量先把主流程搞清楚,然后再去一步步攻克细节。
EurekaServer启动流程总结
到这里 eureka server启动的相关代码就看完了,下面有一张流程图来总结一下的:

申明
本文章首发自本人博客:https://www.cnblogs.com/wang-meng 和公众号:壹枝花算不算浪漫,如若转载请标明来源!
感兴趣的小伙伴可关注个人公众号:壹枝花算不算浪漫

【一起学源码-微服务】Nexflix Eureka 源码四:EurekaServer启动之完成上下文构建及EurekaServer总结的更多相关文章
- 【一起学源码-微服务】Eureka+Ribbon+Feign阶段性总结
		
前言 想说的话 这里已经梳理完Eureka.Ribbon.Feign三大组件的基本原理了,今天做一个总结,里面会有一个比较详细的调用关系流程图. 说明 原创不易,如若转载 请标明来源! 博客地址:一枝 ...
 - 【一起学源码-微服务】Ribbon源码五:Ribbon源码解读汇总篇~
		
前言 想说的话 [一起学源码-微服务-Ribbon]专栏到这里就已经全部结束了,共更新四篇文章. Ribbon比较小巧,这里是直接 读的spring cloud 内嵌封装的版本,里面的各种config ...
 - 【一起学源码-微服务】Ribbon 源码三:Ribbon与Eureka整合原理分析
		
前言 前情回顾 上一篇讲了Ribbon的初始化过程,从LoadBalancerAutoConfiguration 到RibbonAutoConfiguration 再到RibbonClientConf ...
 - 【一起学源码-微服务】Feign 源码一:源码初探,通过Demo Debug Feign源码
		
前言 前情回顾 上一讲深入的讲解了Ribbon的初始化过程及Ribbon与Eureka的整合代码,与Eureka整合的类就是DiscoveryEnableNIWSServerList,同时在Dynam ...
 - 【一起学源码-微服务】Feign 源码二:Feign动态代理构造过程
		
前言 前情回顾 上一讲主要看了@EnableFeignClients中的registerBeanDefinitions()方法,这里面主要是 将EnableFeignClients注解对应的配置属性注 ...
 - 【一起学源码-微服务】Ribbon 源码一:Ribbon概念理解及Demo调试
		
前言 前情回顾 前面文章已经梳理清楚了Eureka相关的概念及源码,接下来开始研究下Ribbon的实现原理. 我们都知道Ribbon在spring cloud中担当负载均衡的角色, 当两个Eureka ...
 - 【一起学源码-微服务】Ribbon 源码二:通过Debug找出Ribbon初始化流程及ILoadBalancer原理分析
		
前言 前情回顾 上一讲讲了Ribbon的基础知识,通过一个简单的demo看了下Ribbon的负载均衡,我们在RestTemplate上加了@LoadBalanced注解后,就能够自动的负载均衡了. 本 ...
 - 【一起学源码-微服务】Ribbon 源码四:进一步探究Ribbon的IRule和IPing
		
前言 前情回顾 上一讲深入的讲解了Ribbon的初始化过程及Ribbon与Eureka的整合代码,与Eureka整合的类就是DiscoveryEnableNIWSServerList,同时在Dynam ...
 - 【一起学源码-微服务】Feign 源码三:Feign结合Ribbon实现负载均衡的原理分析
		
前言 前情回顾 上一讲我们已经知道了Feign的工作原理其实是在项目启动的时候,通过JDK动态代理为每个FeignClinent生成一个动态代理. 动态代理的数据结构是:ReflectiveFeign ...
 
随机推荐
- @loj - 6353@「CodePlus 2018 4 月赛」组合数问题 2
			
目录 @description@ @solution@ @accepted code@ @details@ @description@ 请你找到 k 个不同的组合数,使得对于其中任何一个组合数 \(C ...
 - 添加ODBC数据源
			
添加ODBC数据源
 - @noi.ac - 507@ 二分图最大权匹配
			
目录 @description@ @solution@ @accepted code@ @details@ @description@ 有一天你学了一个能解决二分图最大权匹配的算法,你决定将这个算法应 ...
 - asp.net mvc获取路由参数
			
学习了mvc有一段时间了,本以为直接可以通过request对象直接获取路由参数呢,后来实验了一下发现想错了,mvc有专门获取路由参数的方式,在不同的地方,获取路由参数的方式也不一样,这里分别说一下,在 ...
 - poj 1787 Charlie's Change (多重背包可作完全背包)
			
Charlie's Change Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 3792 Accepted: 1144 ...
 - insert语句让我学会的两个MySQL函数
			
我们要保存数据到数据库,插入数据是必须的,但是在业务中可能会出于某种业务要求,要在数据库中设计唯一索引:这时如果不小心插入一条业务上已经存在同样key的数据时,就会出现异常. 大部分的需求要求我们出现 ...
 - win2d 画出好看的图形
			
本文告诉大家,win2d 不需要从零开始做,以前做出来的很多库其实只需要做很小修改就可以做出好看的效果,而且用在 UWP 上.本文修改原先 大神写的 GDI 图形到 win2d 上,而且可以运行起来 ...
 - 解决input number类型上下滚动 禁用滚轮事件
			
1.去掉input在type="number"时的上下箭头 <style> input::-webkit-outer-spin-button,input::-webki ...
 - 【React】  npm  常用的插件
			
npm install –save-dev package.json 安装环境 https://segmentfault.com/a/1190000008489881 全局 https:/ ...
 - linux一些重要数据结构
			
如同你想象的, 注册设备编号仅仅是驱动代码必须进行的诸多任务中的第一个. 我们将很 快看到其他重要的驱动组件, 但首先需要涉及一个别的. 大部分的基础性的驱动操作包括 3 个重要的内核数据结构, 称为 ...