Eureka中的服务注册,分为服务注册中心,和服务注册这。
一,服务注册者
服务注册者在启动的时候会通过发送rest请求的方式将自己注册到Eureka Server上。Eureka Server将服务注册的原信息保存在双层结构的map上,第一层的key是服务名,第二层的key是具体服务实例名。
在注册完成后服务提供者会维护一个心跳用来持续的,调用续约服务的时间间隔通过eureka。Instance.less-renewal-interval-in-seconds来设置,默认是30秒。
要开启服务的提供者,我们通过@EnableDiscoveryClient来进行配置。
其主要的作用开启一个DiscoveryClient的实例
/**
* Annotation to enable a DiscoveryClient implementation.
* @author Spencer Gibb
*/
而在Eureka 实现的服务治理中对应的是EurekaDiscoveryClient这一个实现,具体的是通过EurekaClient的实现也就是DiscoveryClient来完成的。
二,注册中心。
注册中心接受和处理服务注册者的请求,处理注册请求的逻辑在ApplicationResource的addInstance方法中。
在完成校验之后,会通过InstanceRegistry中的regist的方法完成注册。
public void register(InstanceInfo info, int leaseDuration, boolean isReplication) {
handleRegistration(info, leaseDuration, isReplication);
super.register(info, leaseDuration, isReplication);
}
private void handleRegistration(InstanceInfo info, int leaseDuration,
boolean isReplication) {
log("register " + info.getAppName() + ", vip " + info.getVIPAddress()
+ ", leaseDuration " + leaseDuration + ", isReplication "
+ isReplication);
publishEvent(new EurekaInstanceRegisteredEvent(this, info, leaseDuration,
isReplication));
}
在handleRegistration的方法中,将服务注册的事件广播出去。
然后调用父类的方法完成注册。