Eureka启动流程 - EurekaBootStrap源码解析

cloud源码:https://github.com/spring-cloud/spring-cloud-netflix

netflix源码:https://github.com/Netflix/eureka

一、eureka-server中web.xml解读:

配置了一个监听器(启动核心入口,重点分析):

<listener>
    <listener-class>com.netflix.eureka.EurekaBootStrap</listener-class>
  </listener>

配置了五个过滤器:

  • StatusFilter:负责状态相关的处理逻辑;
  • ServerRequestAuthFilter:对请求进行授权认证处理;
  • RateLimitingFilter: 负责限流相关逻辑的,默认不开启,如果要打开eureka-server内置的限流功能,需要把web文件中RateLimitingFilter的的注释打开,让这个filter生效。
    -* GzipEncofingEnforcingFilter*: /v2/apps相关的请求,会走这里,仅仅对部分特殊的请求生效。
  • jersey:是核心filter,是个ServletContainer,是拦截所有请求的。
  • welcome-file-list配置了status.jsp是欢迎页面,首页,eureka-server的控制台页面,展示注册服务的信息。
        <welcome-file-list>
            <welcome-file>jsp/status.jsp</welcome-file>
        </welcome-file-list>

二、 Eureka初始化的核心入口 - EurekaBootStrap:

eureka-server作为web应用启动时会初始化eureka-core里的监听器EurekaBootStrap,有个contextInitialized()方法,这个是整个eureka-server启动初始化的一个入口:
这里写图片描述

initEurekaEnvironment()方法解析:

这里写图片描述

initEurekaServerContext()方法解析:

可分为七步初始化:

  1. 初始化DefaultEurekaServerConfig: 加载了eureka-server.properties文件中的配置。
    配置信息的加载过程:
    • DefaultEurekaServerConfig构造器中有个init()方法,它将所有配置加载到ConfigurationManager中去;
    • DefaultEurekaServerConfig接口中有所有配置项的获取方法,通过get方式从DynamicPropertyFactory中获取配置,DynamicPropertyFactory是从ConfigurationManager衍生来的;
    • 在获取配置项的时候,如果没有配置,那么就会有默认的值,全部属性都是有默认值的。
  2. EurekaClient: 初始化eureka-server内部的一个eureka-client(用来跟其他的eureka-server节点进行注册和通信的)。
    此处需要注意EurekaInstanceConfig与EurekaClientConfig区别
    这里写图片描述
    DiscoveryClient为EurekaClient的子类,它实现的主要功能:
    (1)读取EurekaClientConfig,包括TransportConfig
    (2)保存EurekaInstanceConfig和InstanceInfo
    (3)处理了是否要注册以及抓取注册表,如果不要的话,释放一些资源
    (4)支持调度的线程池
    (5)支持心跳的线程池
    (6)支持缓存刷新的线程池
    (7)EurekaTransport,支持底层的eureka client跟eureka server进行网络通信的组件,对网络通信组件进行了一些初始化的操作
    (8)抓取注册表

  3. 构造了PeerAwareInstanceRegistry对象,用来感知eureka server集群的服务实例注册表;

  4. 构造了PeerEurekaNodes对象,用于处理复制所有集群更新操作(注册、更新、取消、过期和状态更改) 。
  5. EurekaServerContext:完成eureka-server上下文(context)的构建。
  6. registry.syncUp():从相邻的一个eureka server节点拷贝注册表的信息,如果拷贝失败,就找下一个
  7. EurekaMonitors.registerAllStats(): 监控机制,注册所有监测数据。

没有更多推荐了,返回首页