注册中心 Eureka 源码解析 —— Eureka-Client 初始化(三)之 EurekaClient

本文主要基于 Eureka 1.8.X 版本

  • 1. 概述

  • 2. EurekaClient

  • 2.1 LookupService

  • 3. DiscoveryClient

  • 3.1 构造方法参数

  • 3.2 构造方法

  • 666. 彩蛋


友情提示:欢迎关注公众号【芋道源码】。?关注后,拉你进【源码圈】微信群和【芋艿】搞基嗨皮。

友情提示:欢迎关注公众号【芋道源码】。?关注后,拉你进【源码圈】微信群和【芋艿】】搞基嗨皮。

友情提示:欢迎关注公众号【芋道源码】。?关注后,拉你进【源码圈】微信群和【芋艿】】搞基嗨皮。


1. 概述

本文接《Eureka 源码解析 —— Eureka-Client 初始化(二)之 EurekaClientConfig》,主要分享 Eureka-Client 自身初始化的过程的第三部分 —— EurekaClient,不包含 Eureka-Client 向 Eureka-Server 的注册过程( ?后面会另外文章分享 )。

Eureka-Client 自身初始化过程中,涉及到主要对象如下图:

  1. 创建 EurekaInstanceConfig对象

  2. 使用 EurekaInstanceConfig对象 创建 InstanceInfo对象

  3. 使用 EurekaInstanceConfig对象 + InstanceInfo对象 创建 ApplicationInfoManager对象

  4. 创建 EurekaClientConfig对象

  5. 使用 ApplicationInfoManager对象 + EurekaClientConfig对象 创建 EurekaClient对象

考虑到整个初始化的过程中涉及的配置特别多,拆分成三篇文章:

  1. (一)EurekaInstanceConfig)

  2. (二)EurekaClientConfig

  3. 【本文】(三)EurekaClient

下面我们来看看每个的实现。

推荐 Spring Cloud 书籍

  • 请支持正版。下载盗版,等于主动编写低级 BUG 。

  • 程序猿DD —— 《Spring Cloud微服务实战》

  • 周立 —— 《Spring Cloud与Docker微服务架构实战》

  • 两书齐买,京东包邮。

推荐 Spring Cloud 视频

  • Java 微服务实践 - Spring Boot

  • Java 微服务实践 - Spring Cloud

  • Java 微服务实践 - Spring Boot / Spring Cloud

2. EurekaClient

com.netflix.discovery.EurekaClient,Eureka-Client 接口,声明如下方法:

  • 提供多种方法获取应用集合(com.netflix.discovery.shared.Applications) 和 应用实例信息集合( com.netflix.appinfo.InstanceInfo )。

  • 提供方法获取本地客户端信息,例如,应用管理器( com.netflix.appinfo.ApplicationInfoManager )和 Eureka-Client 配置( com.netflix.discovery.EurekaClientConfig )。

  • 提供方法注册本地客户端的健康检查和 Eureka 事件监听器。

另外,Eureka 2.X 版本正在开发,该接口为 Eureka 1.X 和 2.X 提供平滑过渡接口。

This interface does NOT try to clean up the current client interface for eureka 1.x. Rather it tries to provide an easier transition path from eureka 1.x to eureka 2.x.

2.1 LookupService

com.netflix.discovery.shared.LookupService,查找服务接口,提供简单单一的方式获取应用集合(com.netflix.discovery.shared.Applications) 和 应用实例信息集合( com.netflix.appinfo.InstanceInfo )。

  • 在 Eureka-Client 里,EurekaClient 继承该接口。

  • 在 Eureka-Server 里,com.netflix.eureka.registry.InstanceRegistry 继承该接口。

3. DiscoveryClient

com.netflix.discovery.DiscoveryClient,实现 EurekaClient 接口,用于与 Eureka-Server 交互。实现如下方法:

  • 向 Eureka-Server 注册自身服务

  • 向 Eureka-Server 续约自身服务

  • 向 Eureka-Server 取消自身服务,当关闭时

  • 从 Eureka-Server 查询应用集合和应用实例信息

  • 简单来理解,对 Eureka-Server 服务的增删改查

3.1 构造方法参数

DiscoveryClient 完整构造方法需要传入四个参数,实现代码如下:

DiscoveryClient(ApplicationInfoManager applicationInfoManager, EurekaClientConfig config, AbstractDiscoveryClientOptionalArgs args,
                   Provider<BackupRegistry> backupRegistryProvider) {
    // .... 省略代码
}
  • ApplicationInfoManager,在《Eureka 源码解析 —— Eureka-Client 初始化(一)之 EurekaInstanceConfig》有详细解析。

  • EurekaClientConfig,在《Eureka 源码解析 —— Eureka-Client 初始化(二)之 EurekaClientConfig》有详细解析。

  • com.netflix.discovery.BackupRegistry,备份注册中心接口。当 Eureka-Client 启动时,无法从 Eureka-Server 读取注册信息(可能挂了),从备份注册中心读取注册信息。实现代码如下:

    // BackupRegistry.java
    public interface BackupRegistry {
    Applications fetchRegistry();

    Applications fetchRegistry(String[] includeRemoteRegions);
    }

    // NotImplementedRegistryImpl.java
    public class NotImplementedRegistryImpl implements BackupRegistry {
    @Override
    public Applications fetchRegistry() {
       return null;
    }

    @Override
    public Applications fetchRegistry(String[] includeRemoteRegions) {
       return null;
    }
    }
    • 从 com.netflix.discovery.NotImplementedRegistryImpl 可以看出,目前 Eureka-Client 未提供合适的默认实现。

  • com.netflix.discovery.AbstractDiscoveryClientOptionalArgs,DiscoveryClient 可选参数抽象基类。不同于上面三个必填参数,该参数是选填参数,实际生产下使用较少。实现代码如下:

    public abstract class AbstractDiscoveryClientOptionalArgs<T> {
         
    /**
    * 生成健康检查回调的工厂
    */

    Provider&lt;HealthCheckCallback&gt; healthCheckCallbackProvider;
    /**
    * 生成健康检查处理器的工厂
    */

    Provider&lt;HealthCheckHandler&gt; healthCheckHandlerProvider;
    /**
    * 向 Eureka-Server 注册之前的处理器
    */

    PreRegistrationHandler preRegistrationHandler;
    /**
    * Jersey 过滤器集合
    */

    Collection&lt;T&gt; additionalFilters;
    /**
    * Jersey 客户端
    */

    EurekaJerseyClient eurekaJerseyClient;
    /**
    * 生成 Jersey 客户端的工厂的工厂
    */

    TransportClientFactories transportClientFactories;
    /**
    * Eureka 事件监听器集合
    */

    private Set&lt;EurekaEventListener&gt; eventListeners;
    }
    • x

    • 在 Spring-Cloud-Eureka-Client,提供了默认实现 org.springframework.cloud.netflix.eureka.EurekaHealthCheckHandler,需要结合 spirng-boot-actuate 使用,感兴趣的同学可以看看。本文暂不拓展开,后面另开文章分享。(TODO[0004]:健康检查)

    • com.netflix.appinfo.HealthCheckCallback,健康检查回调接口,目前已经废弃,使用 HealthCheckHandler 替代,你可以不关注该参数

    • com.netflix.appinfo.HealthCheckHandler,健康检查处理器接口,目前暂未提供合适的默认实现,唯一提供的 com.netflix.appinfo.HealthCheckCallbackToHandlerBridge,用于将 HealthCheckCallback 桥接成 HealthCheckHandler,实现代码如下:

      // HealthCheckHandler.java
      public interface HealthCheckHandler {
      InstanceInfo.InstanceStatus 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值