Netflix Eureka 常用接口和类

本章节将简单介绍 Eureka 客户端和服务端常用的 API 接口和类,以及初步认识它们之间的继承关系、干什么用的。

注意:本文将以 Eureka 1.10.10 版本为例

eureka-client-*.jar 客户端

上图为 Eureka 客户端 jar 包的机构,其中 appinfo 包根据名称可得知存放的是应用信息,其中 InstanceInfo 类也位于该包,InstanceInfo 类表示一个实例信息。包 discovery 用来发现服务,包括 DiscoveryClient、EurekaClient 等重要类和接口。我们先看看 DiscoveryClient 类的继承层次结构图:

其中:

  • Singleton ImplementedBy 均是注解,@Singleton 注解表明该类只实例化一次,即是一个单例类;@ImplementedBy 用来指定接口的默认实现类,例如:

@ImplementedBy(DefaultEurekaClientConfig.class)
public interface EurekaClientConfig {
    //
}

上面表示 EurekaClientConfig 接口默认实现类为 DefaultEurekaClientConfig。

  • DiscoveryClient:该类是 Eureka 客户端中最重要的类,使用该类可以实现与 Eureka 服务端交互。例如:向 Eureka 服务器注册服务、服务续约、服务剔除等。

  • EurekaClient:该接口定义了 Eureka 客户端工具方法,例如:shutdown() 关闭Eureka客户端、还将注销请求发送到 Eureka 服务器。EurekaClientConfig getEurekaClientConfig() 返回 EurekaClient 客户端配置信息等。

  • LookupService:该接口定义了实例服务查找方法,例如:Application getApplication(String appName)、List<InstanceInfo> getInstancesById(String id) 等。

除了上面这些接口和类,Eureka client 还提供了:

  • Applications:该类包装由 Eureka 服务器返回的所有应用 Application 信息。

  • Application:该类保存了特定应用程序的实例列表,如:Set<InstanceInfo> instances 该应用中所有的实例信息;

  • InstanceInfo:该类保存了注册到 Eureka 服务器所需的信息,并被其他组件发现。

eureka-core-*.jar 服务端

上图为 eureka-core 即 Eureka 服务端的 jar 包结构,其中 EurekaBootStrap 类是 Eureka 服务端的引导类,该类实现了 ServletContextListener 接口,因此在应用启动时会自动运行。它的类继承类图如下:

EurekaBootStrap 类通过调用 PeerAwareInstanceRegistryImpl、PeerEurekaNodes 类实现服务注册和节点注册信息同步。

  • LeaseManager:该接口负责为特定实例创建/续订和收回租约。只提供了如下四个方法:

    • void register(T r, int leaseDuration, boolean isReplication):为参数 r 创建新的租约

    • boolean cancel(String appName, String id, boolean isReplication):取消匹配 appName 和 id 的 r 对象租约

    • boolean renew(String appName, String id, boolean isReplication):为匹配 appName 和 id 的 r 对象续约

    • void evict():剔除过期租约

  • InstanceRegistry:实例注册,方法:void clearRegistry()、void shutdown() 等

  • PeerAwareInstanceRegistry:该接口主要提供了 int syncUp() 方法,该方法将从对等的 eureka 节点填充注册表信息。如果通信失败,此操作将转移到其他节点,直到列表耗尽。

上面三个接口的继承关系如下图:

到这里 Eureka 的基础用法也就介绍完了,不再使用大量的篇幅去分析源码。如果你有兴趣,可以参考一下 Eureka 源码分析:

Eureka 源码分析(一)

Eureka 源码分析(二)

Eureka 源码分析(三)

Eureka 源码分析(四)

Eureka 源码分析(五)

Eureka 源码分析(六)

Eureka 源码分析(七)

Eureka 源码分析(八)

说说我的看法
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
公众号