# 服务发现数据模型

# InstanceInfo Eureka 原生数据模型

服务注册数据模型

服务注册到 Eureka 中的数据模型如上图,数据模型对应 Eureka 中的 com.netflix.appinfo.InstanceInfo,其相关属性如下图:

大部分属性通过对比 REST API /eureka/apps/{appID}/{instanceID} 中返回的值和属性名称能够得出其大体的意思和作用,下面单独看看几个特别的属性

# LeaseInfo 租赁信息

public class LeaseInfo {

    public static final int DEFAULT_LEASE_RENEWAL_INTERVAL = 30;
    public static final int DEFAULT_LEASE_DURATION = 90;

    // Client settings
    /** Client 端续约的时间间隔,默认:30 s **/
    private int renewalIntervalInSecs = DEFAULT_LEASE_RENEWAL_INTERVAL;
    /** Client 端需要设定的租约的有效时长,默认:90s **/
    private int durationInSecs = DEFAULT_LEASE_DURATION;

    // Server populated
    /** Server 端设置的该租约第一次注册时间 **/
    private long registrationTimestamp;
    /** Server 端设置的该租约的最后一次续约时间 **/
    private long lastRenewalTimestamp;
    /** Server 端设置的该租约被剔除的时间 **/
    private long evictionTimestamp;
    /** Server 端设置的该服务实例标记为 UP 的时间 **/
    private long serviceUpTimestamp;
}

# HashMap metadata 元数据信息

元信息本身是一个 HashMap

# ServiceInstance Spring Cloud Eureka 数据模型

Spring Cloud Discovery 适配了 Zookeeper 、 Consul、Eureka 等注册中心,所以对服务实例进行抽象定义。

ServiceInstance 相关实现如下:

# 服务的基本操作

服务的基本操作包括如下:

  • 服务注册
  • 服务下线
  • 服务续租
  • 服务剔除

而这些操作都在 InstanceRegistry 中实现,来看看 InstanceRegistry 类图结构:

通过类结构追述到其两个接口定义,这个两个接口对 Eureka 注册、下线、续租、剔除,查询等进行了定义:

# LeaseManager<T>

租赁管理接口 ,定义了 服务注册、剔除、续租、删除服务。

  • register :用于注册服务实例信息
  • cancel:用于删除服务实例
  • renew:与 Eureka Server 进行心跳操作,维持租约
  • evict:Server 剔除租约过期的服务实例

# LookupService<T>

主要是给 Client 端提供服务实例查询方法的 API 定义。

  • getApplication(String appName)
  • getApplications()
  • getInstancesById(String id)
  • getNextServerFromEureka(String virtualHostname, boolean secure)
精彩内容推送,请关注公众号!
最近更新时间: 5/28/2020, 3:14:17 PM