前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【一起学源码-微服务】Nexflix Eureka 源码四:EurekaServer启动之完成上下文构建及EurekaServer总结

【一起学源码-微服务】Nexflix Eureka 源码四:EurekaServer启动之完成上下文构建及EurekaServer总结

作者头像
一枝花算不算浪漫
发布2019-12-30 18:26:27
4750
发布2019-12-30 18:26:27
举报
文章被收录于专栏:一枝花算不算浪漫的专栏

前言

上篇文章已经介绍了 Eureka Server上下文创建相关的Eureka Client逻辑,这一部分还是比较复杂的。接下来就讲解下Eureka Server上下文初始化最后的部分,然后加上整个Eureka Server启动的总结。

如若转载 请标明来源:一枝花算不算浪漫

initEurekaServerContext

EurekaBootStrap.initEurekaServerContext

代码语言:javascript
复制
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 和公众号:壹枝花算不算浪漫,如若转载请标明来源!

感兴趣的小伙伴可关注个人公众号:壹枝花算不算浪漫

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-12-26 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • initEurekaServerContext
  • EurekaServer启动流程总结
  • 申明
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档