Netflix Eureka - 服务端实例构造(eureka-server/eureka-client启动流程)

97 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

eureka-server启动流程

  1. 初始化环境

    1. 数据中心

    2. 运行环境

  2. 初始化上下文

    1. 构造EurekaServerContext

      1. 构造EurekaServerConfig

        1. 加载eureka-server.properties和eureka-server-env.properties文件中的配置项
      2. 构造ServerCodes

        1. 基于EurekaServerConfig构造,用于eureka-server收发请求时的编码与解码
      3. 构造PeerAwareInstanceRegistry

        1. 加入EurekaServerConfig

        2. 加入ServerCodes

        3. 构造EurekaClientConfig

          1. 加载eureka-client.properties和eureka-client-env.properties文件中的配置项
        4. 构造EurekaClient

          1. 基于EurekaClientConfig构造,用于在eureka-server集群中自己作为服务实现服务发现与注册功能
      4. 构造PeerEurekaNodes

        1. 加入PeerAwareInstanceRegistry

        2. 加入EurekaServerConfig

        3. 加入EurekaClientConfig

        4. 加入ServerCodes

        5. 加入ApplicationMananger

      5. 构造ApplicationManager

        1. 构造EurekaInstanceConfig

          1. 加载eureka-client.properties和eureka-client-env.properties文件中的配置项
        2. 构造InstanceInfo

          1. 基于EurekaInstanceConfig通过EurekaConfigBasedInstanceInfoProvider
    2. 初始化EurekaServerContext

      1. 更新eureka server集群信息

      2. 基于eureka server集群信息初始化注册表

    3. 从相邻的eureka server节点拷贝注册表

    4. 注册监控

    5. 上下文放入ServletContext中

Eureka Server启动流程图.png

eureka-client启动流程

eureka-examples项目中ExampleEurekaClient类,作为eureka-client客户端启动流程demo。

eureka server包含一个内部的eureka client实例,服务实例启动的时候,会启动eureka client。

使用eureka client向eureka server服务注册

  1. 读取eureka-client.properties配置文件,构造EurekaInstanceConfig实例(服务实例的配置),基于接口对外提供服务实例的配置项的读取

  2. 基于服务实例的配置,构造服务实例(InstanceInfo)

  3. 基于服务实例的配置和服务实例,构造服务实例管理器(ApplicationInfoManager)

  4. 读取eureka-client.properites配置文件,构造eureka client的配置(EurekaClientConfig),基于接口对外提供eureka client的配置项的读取

  5. 基于eureka client配置(EurekaClientConfig)和服务实例管理器(ApplicationInfoManager),构造EurekaClient(DiscoveryClient),

    1. 保存eureka-client配置
    2. 构造服务注册和服务发现的指标统计监控器
    3. 启动3个线程池(调度、心跳、缓存刷新)
    4. 启动网络通信组件
      1. ClosableResolver bootstrapResolver
      2. TransportClientFactory transportClientFactory
      3. EurekaHttpClient registrationClient
      4. EurekaHttpClientFactory registrationClientFactory
      5. EurekaHttpClient queryClient
      6. EurekaHttpClientFactory queryClientFactory
    5. 抓取注册表,如果失败,从备用注册表地址抓取
    6. 初始化调度任务
      1. 服务抓取
      2. 服务注册
        1. 心跳调度器
        2. 服务实例信息同步器
        3. 服务实例状态变更监听器
    7. 注册监控项