0
点赞
收藏
分享

微信扫一扫

SpringCloud源码分析 (Eureka-Client-源码分析-重要Api和入口类) (二)


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

SpringCloud源码分析 (Eureka-Client-源码分析-重要Api和入口类) (二)_spring cloud


表示该类保存一个微服务主机的信息。一个该类实例就代表了一个微服务主机。该主机注册到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;

SpringCloud源码分析 (Eureka-Client-源码分析-重要Api和入口类) (二)_spring cloud_02

SpringCloud源码分析 (Eureka-Client-源码分析-重要Api和入口类) (二)_微服务_03

1.2 Application

Application.java

SpringCloud源码分析 (Eureka-Client-源码分析-重要Api和入口类) (二)_微服务_04

一个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

SpringCloud源码分析 (Eureka-Client-源码分析-重要Api和入口类) (二)_微服务_05

该类封装了来自于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。

SpringCloud源码分析 (Eureka-Client-源码分析-重要Api和入口类) (二)_配置信息_06

2.2 EurekaClientConfigBean

EurekaClientConfigBean类

SpringCloud源码分析 (Eureka-Client-源码分析-重要Api和入口类) (二)_微服务_07


SpringCloud源码分析 (Eureka-Client-源码分析-重要Api和入口类) (二)_配置信息_08

其读取的是eureka.client前辍的配置信息。这个类已经被@ConægurationProperties注解了,所以这些配置信息可以被自动封装并注册到容器

2.3 EurekaInstanceConfigBean

EurekaInstanceConfigBean类

SpringCloud源码分析 (Eureka-Client-源码分析-重要Api和入口类) (二)_java_09


SpringCloud源码分析 (Eureka-Client-源码分析-重要Api和入口类) (二)_spring cloud_10

其读取的是eureka.instance的属性值。这个类也已经被@ConægurationProperties注解了,所以这些配置信息可以被自动封装并注册到容器。

2.4 EurekaClient

EurekaClient类

SpringCloud源码分析 (Eureka-Client-源码分析-重要Api和入口类) (二)_配置信息_11

这就是我们寻找的客户端实例。默认情况下创建的Eureka Client本身可以实现动态更新,即配置文件中相关的配置信息发生了变更,这个Client注册到Server的信息也会自动变更到Eureka Server的注册表中。


举报

相关推荐

0 条评论