原创

透彻理解Spring Cloud系列(十)——Eureka Server:EurekaServerContext构造

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

正文到此结束

感谢赞赏~

本文目录