Eureka的基本概念
-
Register——服务注册
当Eureka Client向Eureka Server注册时,Eureka Client提供自身的元数据,比如IP地址、端口、运行状况指标的Url、主页地址等信息。 -
Renew——服务续约
Eureka Client 在默认的情况下会每隔30秒发送一次心跳来进 行服务续约。通过服务续约来告知Eureka Server该Eureka Client仍然可用,没有出现故障。正常情况下,如果Eureka Server在90秒内没有收到Eureka Client的心跳,Eureka Server会将Eureka Client实例从注册列表中删除。注意:官网建议不要更改服务续约的间隔时间。 -
Fetch Registries——获取服务注册列表信息
Eureka Client从Eureka Server获取服务注册表信息,并将其缓存在本地。Eureka Client会使用服务注册列表信息查找其他服务的信息,从而进行远程调用。该注册列表信息定时(每30秒)更新一次,每次返回注册列表信息可能与Eureka Client的缓存信息不同,Eureka Client会自己处理这些信息。如果由于某种原因导致注册列表信息不能及时匹配,EurekaClient会重新获取整个注册表信息。EurekaServer缓存了所有的服务注册列表信息,并将整个注册列表以及每个应用程序的信息进行了压缩,压缩内容和没有压缩的内容完全相同。EurekaClient和Eureka Server可以使用JSON和XML数据格式进行通信。在默认的情况下,Eureka Client使用JSON格式的方式来获取服务注册列表的信息。
-
Cancel——服务下线
Eureka Client在程序关闭时可以向Eureka Server发送下线请求。发送请求后,该客户端的实例信息将从Eureka Server 的服务注册列表中删除。该下线请求不会自动完成,需要在程序关闭时调用以下代码:DiscoveryManager .getInstance().shutdownComponent() ;
-
Eviction——服务剔除
在默认情况下,当Eureka Client连续90秒没有向Eureka Server发送服务续约(即心跳)时,EurekaServer会将该服务实例从服务注册列表删除,即服务剔除。
Register服务注册
服务注册,即Eureka Client向Eureka Server提交自己的服务信息,包括IP地址、端口、ServiceId等信息。如果Eureka Client在配置文件中没有配置ServiceId,则默认为配置文件中配置的服务名,即${spring.application.name}的值。
当Eureka Client启动时,会将自身的服务信息发送到Eureka Server。这个过程其实非常简单,现在来从源码的角度分析服务注册的过程。
在工程的Maven 的依赖包下,找到eureka-client-1 .6.2.jar包。在com.netflix.discovery 包下有一个DiscoveryClient类
,该类包含了Eureka Client向Eureka Server注册的相关方法。其中,DiscoveryClient 实现了EurekaClient 接口,并且它是一个单例模式
,而EurekaClient 继承了LookupService接口。它们之间的关系如图5-4所示: