springcloud 之 eureka 源码解析(2)-Eureka Server 启动流程分析

Eureka Server 启动流程分析

前言

eureka server 启动的话,其实就相当于根据 web.xml 启动容器,然后对外提供服务,所以我们就从启动类作为入口分析

1、整体流程图

EurekaServer启动整体流程图

2、相应的类概念说明

2.1 ConfigurationManager

配置管理器,通过他去获取构造 Configuration

2.2 AbstractConfiguration

抽象配置类,他有很多个实现类,ConfigurationManager 构造的时候返回他,其实实例化的时候由子类来做。

  • 下图是类图,可以看一下他们的关系
    类图
2.3 EurekaServerConfig

Eureka Server 的配置类,默认用 DefaultEurekaServerConfig 来实例化,主要是涵盖了 server 的相关配置,用接口的形式对外提供其配置信息

2.4 ApplicationInfoManager

应用管理器,持有 InstanceInfo、EurekaInstanceConfig 的引用,主要是对应用实例做相关的操作

ApplicationInfoManager

2.5 EurekaClientConfig

客户端的配置,因为 eureka server 其实本身就是一个服务,他自己作为一个客户端向自己注册,如果集群的话,会向其他节点注册

2.6 DiscoveryClient

客户端组件,初始化配置,持有 ApplicationInfoManager 的引用、EurekaClientConfig的引用,还初始化了很多定时任务

2.7 PeerAwareInstanceRegistry

PeerAware,可以识别eureka server集群的:peer,多个同样的东西组成的一个集群,peers集群,peer就是集群中的一个实例

InstanceRegistry:实例注册,服务实例注册,注册表,这个里面放了所有的注册到这个eureka server上来的服务实例,就是一个服务实例的注册表

PeerAwareInstanceRegistry:可以感知eureka server集群的服务实例注册表,eureka client(作为服务实例)过来注册的注册表,而且这个注册表是可以感知到eureka server集群的。假如有一个eureka server集群的话,这里包含了其他的eureka server中的服务实例注册表的信息的。

2.8 PeerEurekaNodes

PeerEurekaNodes,代表了eureka server集群,peers大概来说多个相同的实例组成的一个集群,peer就是peers集群中的一个实例,PeerEurekaNodes,应该是代表的是eureka server集群

2.9 EurekaServerContext

Eureka Server 的上下文对象。持有了 EurekaServcerConfig、ServerCodecs、PeerAwareInstanceRegistry、PeerEurekaNodes、ApplicationInfoManager 的引用。

1、com.netflix.eureka.EurekaBootStrap

// 从类定义可以看出来,实现了 ServletContextListener,所以启动的时候就会调用 contextInitialized 方法
public class EurekaBootStrap implements ServletContextListener
    

public interface ServletContextListener extends EventListener {
   
   
	/**
	 ** Notification that the web application initialization
	 ** process is starting.
	 ** All ServletContextListeners are notified of context
	 ** initialization before any filter or servlet in the web
	 ** application is initialized.
	 */

    public void contextInitialized ( ServletContextEvent sce );

	/**
	 ** Notification that the servlet context is about to be shut down.
	 ** All servlets and filters have been destroy()ed before any
	 ** ServletContextListeners are notified of context
	 ** destruction.
	 */
    public void contextDestroyed ( ServletContextEvent sce );
}

2、contextInitialized 方法分析

@Override
public void contextInitialized(ServletContextEvent event) {
   
   
    try {
   
   
        //1、初始化 eureka 环境
        initEurekaEnvironment();
        
        // 2、初始化 eureka 上下文
        initEurekaServerContext();

        ServletContext sc = event.getServletContext();
        sc.setAttribute(EurekaServerContext.class.getName(), serverContext);
    } catch (Throwable e) {
   
   
        logger.error("Cannot bootstrap eureka server :", e);
        throw new RuntimeException("Cannot bootstrap eureka server :", e);
    }
}

3、initEurekaEnvironment 分析

protected void initEurekaEnvironment(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值