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
的初始化。