spring cloud Eureka

it2022-05-05  85

注册中心Eureka

分为EureKa server和EureKa client。其中服务提供者和服务消费者都是Eureka client。

服务注册-每个被@EnableDiscoveryClient标注的实例在启动的时候会去server里面把自己注册了,同是开启定时任务,定时去续约,续约过程是发送心跳,如果server在一定时间没有收到服务的心跳信息,会去把此服务注销掉。

注册方法见,DiscoveryClient.register(),会把自己的servcieId,port,id等信息通过http方式发送到server上,被server里面的map收集起来

续约方法见,DiscoveryClient.renew(),续约的过程是通过发送心跳信息到server上,以防止server把服务剔除出去

服务发现,服务实例在启动的时候会通过http方式去server里面取application信息,缓存到本地。同是开启定时任务定时去刷新本地的服务列表,默认时间是30秒,定时任务见下图

服务消费 ribbon

使用ribbon消费的时候,会被RibbonLoadBalancerClient 拦截到。然后通过本地获取缓存的服务,生成一个list(通过定时任务每隔1秒生成一下list),采取一定的调用策略,达到负载均衡的效果。默认是轮询算法,见下图

新服务的发布会被server立即存储起来,但是不会被其他的服务后者消费者立马感知,他们需要等服务发现的下一次定时任务下一次执行的时候才会被缓存

服务的下线不会被server马上注销掉(map里面还会有),server会剔除超过90秒没有续约的服务,所以这个90秒内服务还是可以在map里面的。此时客户端的服务发现刷新的时候还是会找到失效的服务,这时会带来一个问题,服务消费者通过ribbon消费的时候会出现500的错误,此时就需要引入容错机制。


最新回复(0)