2023-08-07  阅读(0)
原文作者:Ressmix 原文地址:https://www.tpvlog.com/article/239

EurekaServerContext,代表了当前这个Eureka-Server的服务上下文,包含了服务需要的所有东西。可以这么说,整个Eureka-Server的初始化过程,最终的目的其实就是构建这个服务上下文:

    serverContext = new DefaultEurekaServerContext(
        eurekaServerConfig,
        serverCodecs,
        registry,
        peerEurekaNodes,
        applicationInfoManager
    );
    
    // 将EurekaServerContext保存到EurekaServerContextHolder中,方便使用
    EurekaServerContextHolder.initialize(serverContext);
    // 初始化EurekaServerContext
    serverContext.initialize();

通过上述EurekaBootStrap启动流程的代码也可以知道,EurekaServerContext的构造依赖了我们之前讲过的EurekaServerConfig、PeerAwareInstanceRegistry、PeerEurekaNodes、ApplicationInfoManager等。

一、EurekaServerContext

1.1 接口

EurekaServerContext是一个接口,通过方法名,我们可以知道,除了一些get方法获取内部的属性信息外,它的核心部分是initializeshutdown

    public interface EurekaServerContext {
    
        /**
         * 执行初始化上下文
         */
        void initialize() throws Exception;
    
        /**
         * 关闭上下文
         */
        void shutdown() throws Exception;
    
        EurekaServerConfig getServerConfig();
    
        PeerEurekaNodes getPeerEurekaNodes();
    
        ServerCodecs getServerCodecs();
    
        PeerAwareInstanceRegistry getRegistry();
    
        ApplicationInfoManager getApplicationInfoManager();
    }

1.2 实现类

EurekaServerContext的实现类是DefaultEurekaServerContext,它的构造函数纯粹就是设置属性:

    public class DefaultEurekaServerContext implements EurekaServerContext {
        private final EurekaServerConfig serverConfig;
        private final ServerCodecs serverCodecs;
        private final PeerAwareInstanceRegistry registry;
        private final PeerEurekaNodes peerEurekaNodes;
        private final ApplicationInfoManager applicationInfoManager;
    
        @Inject
        public DefaultEurekaServerContext(EurekaServerConfig serverConfig,
                                   ServerCodecs serverCodecs,
                                   PeerAwareInstanceRegistry registry,
                                   PeerEurekaNodes peerEurekaNodes,
                                   ApplicationInfoManager applicationInfoManager) {
            this.serverConfig = serverConfig;
            this.serverCodecs = serverCodecs;
            this.registry = registry;
            this.peerEurekaNodes = peerEurekaNodes;
            this.applicationInfoManager = applicationInfoManager;
        }
    }

二、initialize初始化

我们重点看下EurekaServerContext的初始化方法——initialize,它的内部其实就是调用了PeerEurekaNodes.start()PeerAwareInstanceRegistry.init()进行初始化:

    public void initialize() throws Exception {
        logger.info("Initializing ...");
        // 启动 Eureka-Server 集群节点集合(复制)
        peerEurekaNodes.start();
        // 初始化 应用实例信息的注册表
        registry.init(peerEurekaNodes);
        logger.info("Initialized");
    }
  • PeerEurekaNodes.start():初始化集群节点信息;创建定时任务,自动更新集群节点信息。
  • PeerAwareInstanceRegistry.init():就是开启一些定时调度任务,对集群的实例注册表进行初始化。

三、总结

本章,我对EurekaServerContext进行了介绍,它其实就代表了当前这个Eureka-Server的服务上下文,包含了服务需要的所有东西。EurekaServerContext的初始化其实就内部的PeerEurekaNodesPeerAwareInstanceRegistry的初始化。


Java 面试宝典是大明哥全力打造的 Java 精品面试题,它是一份靠谱、强大、详细、经典的 Java 后端面试宝典。它不仅仅只是一道道面试题,而是一套完整的 Java 知识体系,一套你 Java 知识点的扫盲贴。

它的内容包括:

  • 大厂真题:Java 面试宝典里面的题目都是最近几年的高频的大厂面试真题。
  • 原创内容:Java 面试宝典内容全部都是大明哥原创,内容全面且通俗易懂,回答部分可以直接作为面试回答内容。
  • 持续更新:一次购买,永久有效。大明哥会持续更新 3+ 年,累计更新 1000+,宝典会不断迭代更新,保证最新、最全面。
  • 覆盖全面:本宝典累计更新 1000+,从 Java 入门到 Java 架构的高频面试题,实现 360° 全覆盖。
  • 不止面试:内容包含面试题解析、内容详解、知识扩展,它不仅仅只是一份面试题,更是一套完整的 Java 知识体系。
  • 宝典详情:https://www.yuque.com/chenssy/sike-java/xvlo920axlp7sf4k
  • 宝典总览:https://www.yuque.com/chenssy/sike-java/yogsehzntzgp4ly1
  • 宝典进展:https://www.yuque.com/chenssy/sike-java/en9ned7loo47z5aw

目前 Java 面试宝典累计更新 400+ 道,总字数 42w+。大明哥还在持续更新中,下图是大明哥在 2024-12 月份的更新情况:

想了解详情的小伙伴,扫描下面二维码加大明哥微信【daming091】咨询

同时,大明哥也整理一套目前市面最常见的热点面试题。微信搜[大明哥聊 Java]或扫描下方二维码关注大明哥的原创公众号[大明哥聊 Java] ,回复【面试题】 即可免费领取。

阅读全文