3.2 服务的核心操作
3.2.1 概述
对于服务发现来说,围绕服务实例主要有如下几个重要的操作:
❑ 服务注册(register)
❑ 服务下线(cancel)
❑ 服务租约(renew)
❑ 服务剔除(evict)
围绕这几个功能,Eureka设计了几个核心操作类:
❑ com/netflix/eureka/lease/LeaseManager.java
❑ com/netflix/discovery/shared/LookupService.java
❑ com/netflix/eureka/registry/InstanceRegistry.java
❑ com/netflix/eureka/registry/AbstractInstanceRegistry.java
❑ com/netflix/eureka/registry/PeerAwareInstanceRegistryImpl.java
Spring Cloud Eureka在Netflix Eureka的基础上,抽象或定义了如下几个核心类:
❑ org/springframework/cloud/netflix/eureka/server/InstanceRegistry.java
❑ org/springframework/cloud/client/serviceregistry/ServiceRegistry.java
❑ org/springframework/cloud/netflix/eureka/serviceregistry/EurekaServiceRegistry.java
❑ org/springframework/cloud/netflix/eureka/serviceregistry/EurekaRegistration.java
❑ org/springframework/cloud/netflix/eureka/EurekaClientAutoConfiguration.java
❑ org/springframework/cloud/netflix/eureka/EurekaClientConfigBean.java
❑ org/springframework/cloud/netflix/eureka/EurekaInstanceConfigBean.java
其中LeaseManager以及LookupService是Eureka关于服务发现相关操作定义的接口类,前者定义了服务写操作相关的方法,后者定义了查询操作相关的方法。下面我们重点看下这两个类。
3.2.2 LeaseManager
LeaseManager(com/netflix/eureka/lease/LeaseManager.java)接口定义了应用服务实例在服务中心的几个操作方法:register、cancel、renew、evict。其接口源码如下:
public interface LeaseManager<T> { void register(T r, int leaseDuration, boolean isReplication); boolean cancel(String appName, String id, boolean isReplication); boolean renew(String appName, String id, boolean isReplication); void evict(); }
这里简单介绍下这几个方法:
❑ Register:用于注册服务实例信息。
❑ Cancel:用于删除服务实例信息。
❑ Renew:用于与Eureka Server进行心跳操作,维持租约。
❑ evit是Server端的一个方法,用于剔除租约过期的服务实例信息。
3.2.3 LookupService
LookupService(com/netflix/discovery/shared/LookupService.java)接口定义了Eureka Client从服务中心获取服务实例的查询方法。其定义如下:
public interface LookupService<T> { Application getApplication(String appName); Applications getApplications(); List<InstanceInfo> getInstancesById(String id); InstanceInfo getNextServerFromEureka(String virtualHostname, boolean secure); }
这个接口主要是给Client端用的,其定义了获取所有应用信息、根据应用id获取所有服务实例,以及根据visualHostname使用round-robin方式获取下一个服务实例的方法。