5. 服务治理机制¶
6. 服务提供者¶
6.1. 服务注册¶
服务启动时服务通过reset请求将自己注册到Eureka,同时带上服务的一些元数据信息。Eureka接收到reset请求后,将元数据信息存储在一个双层结构Map中,第一层的key是服务名,第二层的key是服务实例名。
6.2. 服务同步¶
上图中两个服务提供者分别注册到两个注册中心,由于注册中心之间的相互注册,当服务提供者发送注册请求到一个注册中心时,它会将该请求转发到相连的其它注册中心,从而实现注册中心之间的服务同步。我们可以从任意一个注册中心获取所有的注册服务信息。
6.3. 服务续约¶
服务注册完成之后,服务提供者将维护一个心跳来告诉注册中心服务还活着,防止注册中心将实例从服务列表中剔除。eureka.instance.lease-renewal-interval-in-second参数用于定义服务续约任务的调用间隔时间,默认30秒。eureka.instanc.lease-expiration-duration-in-seconds参数用于定义服务失效时间,默认90秒。
7. 服务消费者¶
7.1. 获取服务¶
服务消费者启动时,将发送REST请求从服务注册中心获取注册的服务信息列表。为了性能考虑,Eureka会维护一份只度的服务清单来返回给客户端,同时该缓存清单会每隔30秒更新一次。eureka.client.registry-fetch-interval-seconds设置更新缓存服务清单时间。
7.2. 服务调用¶
服务消费者在获取到服务信息列表后,通过服务名可以获取服务对应的实例名和元数据信息。消费者可以自己选择需要具体调用那个实例,在Ribbon中会默认采用轮询方式进行调用,从而实现客户端的负载均衡。
7.3. 服务下线¶
系统运行过程中服务停止或重启,服务将发起一个REST请求给注册中心,注册中心将实例状态设置为下线,并且将这个时间传播出去