Eureka Client源码解析
文章目录
- 1.Eureka Client源码的重要API
- 1.1 InstanceInfo
- 1.2 Application
- 1.3 Applications
- 1.4 Jersey
- 2. Eureka Client解析入口中的重要类
- 2.1 EurekaClientAutoConfiguration
- 2.2 EurekaClientConfigBean
- 2.3 EurekaInstanceConfigBean
- 2.4 EurekaClient
1.Eureka Client源码的重要API
1.1 InstanceInfo
InstanceInfo.java
表示该类保存一个微服务主机的信息。一个该类实例就代表了一个微服务主机。该主机注册到EurekaServer 就是将其InstanceInfo写入Eureka注册表中, 且被其他Server读取到该Server的信息就是这个InstanceInfo
// 记录当前InstanceInfo在Server端被修改的时间戳
private volatile Long lastUpdatedTimestamp;
// 记录当前InstanceInfo在Client端被修改的时间戳
private volatile Long lastDirtyTimestamp;
// 记录当前Client在Server端的状态
private volatile InstanceStatus status = InstanceStatus.UP;
// 该状态用于计算Client在Server端的状态status(在Client提交注册请求与Renew续约请求
时)
private volatile InstanceStatus overriddenStatus =
InstanceStatus.UNKNOWN;
1.2 Application
Application.java
一个Application实例中保存着一个特定微服务的所有提供者实例。
// 保存着当前name所指定的微服务名称的所有InstanceInfo
private final Set<InstanceInfo> instances;
private final AtomicReference<List<InstanceInfo>> shuffledInstances;
// key为instanceId,value为instanceInfo
private final Map<String, InstanceInfo> instancesMap;
1.3 Applications
Applications
该类封装了来自于Eureka Server的所有注册信息。我们可以称其为“客户端注册表
”。之所以要强调“客户端”是因为,服务端的注册表不是这样表示的,是一个Map。
// key为微服务名称,value为Application
private final Map<String, Application> appNameApplicationMap;
说明一下: 客户端将服务端注册表下载到本地, 变为Applications了.
InstanceInfo为每一个微服务, Application代表为一个提供者实例
1.4 Jersey
Jersey框架
Spring Cloud中Eureka Client与Eureka Server的通信,及Eureka Server间的通信,均采用的是Jersey框
架。
Jersey框架是一个开源的RESTful框架,实现了JAX-RS规范。该框架的作用与SpringMVC是相同的,其
也是用户提交URI后,在处理器中进行路由匹配,路由到指定的后台业务。这个路由功能同样也是通过
处理器完成的,只不过这里的处理器不叫Controller,而叫Resource。
/**
* A <em>jersey</em> resource that handles operations for a particular instance.
*
* @author Karthik Ranganathan, Greg Kim
*
*/
@Produces({"application/xml", "application/json"})
public class InstanceResource {
2. Eureka Client解析入口中的重要类
2.1 EurekaClientAutoConfiguration
EurekaClientAutoConfiguration类
这是一个配置类,在应用启动时会创建该类中满足条件的Bean。其中就包含EurekaClient。
2.2 EurekaClientConfigBean
EurekaClientConfigBean类
其读取的是eureka.client前辍的配置信息。这个类已经被@ConægurationProperties注解了,所以这些配置信息可以被自动封装并注册到容器
2.3 EurekaInstanceConfigBean
EurekaInstanceConfigBean类
其读取的是eureka.instance的属性值。这个类也已经被@ConægurationProperties注解了,所以这些配置信息可以被自动封装并注册到容器。
2.4 EurekaClient
EurekaClient类
这就是我们寻找的客户端实例。默认情况下创建的Eureka Client本身可以实现动态更新,即配置文件中相关的配置信息发生了变更,这个Client注册到Server的信息也会自动变更到Eureka Server的注册表中。