Eureka的核心类.
InstanceInfo
<instance>
<instanceId>CHEND-PC.sen5.sz:sw-user:8006</instanceId>
<hostName>192.168.150.24</hostName>
<app>SW-USER</app>
<ipAddr>192.168.150.24</ipAddr>
<status>UP</status>
<overriddenstatus>UNKNOWN</overriddenstatus>
<port enabled="true">8006</port>
<securePort enabled="false">443</securePort>
<countryId>1</countryId>
<dataCenterInfo class="com.netflix.appinfo.InstanceInfo$DefaultDataCenterInfo">
<name>MyOwn</name>
</dataCenterInfo>
<leaseInfo>
<renewalIntervalInSecs>30</renewalIntervalInSecs>
<durationInSecs>90</durationInSecs>
<registrationTimestamp>1554119366405</registrationTimestamp>
<lastRenewalTimestamp>1554164316452</lastRenewalTimestamp>
<evictionTimestamp>0</evictionTimestamp>
<serviceUpTimestamp>1554119366406</serviceUpTimestamp>
</leaseInfo>
<metadata>
<management.port>8006</management.port>
<jmx.port>51543</jmx.port>
</metadata>
<homePageUrl>http://192.168.150.24:8006/</homePageUrl>
<statusPageUrl>http://192.168.150.24:8006/actuator/info</statusPageUrl>
<healthCheckUrl>http://192.168.150.24:8006/actuator/health</healthCheckUrl>
<vipAddress>sw-user</vipAddress>
<secureVipAddress>sw-user</secureVipAddress>
<isCoordinatingDiscoveryServer>false</isCoordinatingDiscoveryServer>
<lastUpdatedTimestamp>1554119366406</lastUpdatedTimestamp>
<lastDirtyTimestamp>1554119366397</lastDirtyTimestamp>
<actionType>ADDED</actionType>
</instance>
复制代码
字段含义
- InstanceId:实例id
- hostName:主机名字
- app:应用名称
- ipAddr:ip地址
- status:实例的状态,例如UP,DOWN,STARTING,OUT_OF_SERVICE,UNKNOWN
- overriddenstatus:外界需要强制副高的状态值,默认的使用UNKNOWN
- port:端口号
- securePort:https的端口号
- countryId:国家ID(被废弃)
- dataCenterInfo:数据中心的信息,Netflix或者Amazon或者MyOwn
- leaseInfo
- renewalIntervalInSecs:client端续约的间隔周期
- durationInSecs:client段需要设定的租约的有效时长
- registrationTimestamp:server端设置的该租约的第一次注册时间
- lastRenewalTimestamp:server端设置的该租约的最后一次续约时间
- evictionTimestamp:server端设置的该租约被剔除的时间
- serviceUpTimestamp:server端设置的该服务实例标记的为UP的时
- homePageUrl:应用实例的首页的url
- statusPageUrl:应用实例的状态页url
- healthCheckUrl:应用实例健康检查的url
- secureVipAddress:https的虚拟ip地址
- isCoordinatingDiscoveryServer:首先标志该discoveryServer是否是响应你请求的实例
- lastUpdatedTimestamp:状态信息最后更新时间
- lastDirtyTimestamp:实例信息最新的国企时间,在client端用于表示该实例信息是否与Eureka Server一致,在Server端则用于多个Eureka Server之间的信息同步
- actionType:表示Eureka Server对该实例执行的操作,包括ADDED,MODIFIED,DELETED这三类
ServiceInstance
ServiceInstance是SpringCloud對service discovery的实例信息的抽象接口,约定了服务发现实例应用有哪些通用的信息,由于SpringCloud适配了Zookeeper,Consul,Netflix Eureka注册中心的,需要更加的抽象。 EurekaRegistration就是ServiceInstance接口的实现类。
public interface ServiceInstance {
default String getInstanceId() {
return null;
}
String getServiceId();
String getHost();
int getPort();
boolean isSecure();
URI getUri();
Map<String, String> getMetadata();
default String getScheme() {
return null;
}
}
复制代码
InstanceStatus
InstanceStatus用于表示服务实例的状态
public static enum InstanceStatus {
UP,
DOWN,
STARTING,
OUT_OF_SERVICE,
UNKNOWN;
private InstanceStatus() {
}
public static InstanceInfo.InstanceStatus toEnum(String s) {
if (s != null) {
try {
return valueOf(s.toUpperCase());
} catch (IllegalArgumentException var2) {
InstanceInfo.logger.debug("illegal argument supplied to InstanceStatus.valueOf: {}, defaulting to {}", s, UNKNOWN);
}
}
return UNKNOWN;
}
}
复制代码
该类主要包括了 UP,DOWN,STARTING, OUT_OF_SERVICE,UNKNOWN几种状态,OUT_OF_SERVICE即停止接受请求,处于该服务状态的实例不会被路由到,经常用于升级部署服务的场景。
LeaseManager
接口定义了应用服务实例在服务中心的几个基本操作
public interface LeaseManager<T> {
//用于注册服务实例信息
void register(T var1, int var2, boolean var3);
//用于删除实例信息
boolean cancel(String var1, String var2, boolean var3);
//用于与EurekaServer进行心跳操作,维持租约
boolean renew(String var1, String var2, boolean var3);
//server端的一个方法,用于剔除租约过期的服务实例信息
void evict();
}
复制代码
LookupService
该接口定义了Eureka Client从服务中心获取服务实例的查询方法。这个接口主要Client端使用,其定义了获取所有应用信息,根据应用id获取所有服务实例,以及根据visualHostname使用round-robin方式获取下一个服务实例的方法。
public interface LookupService<T> {
Application getApplication(String var1);
Applications getApplications();
List<InstanceInfo> getInstancesById(String var1);
InstanceInfo getNextServerFromEureka(String var1, boolean var2);
}
复制代码