本章节将简单介绍 Eureka 客户端和服务端常用的 API 接口和类,以及初步认识它们之间的继承关系、干什么用的。
注意:本文将以 Eureka 1.10.10 版本为例
上图为 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 即 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 源码分析: