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方法获取内部的属性信息外,它的核心部分是initialize
和shutdown
:
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的初始化其实就内部的PeerEurekaNodes
和PeerAwareInstanceRegistry
的初始化。
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] ,回复【面试题】 即可免费领取。