SpringCloud

2018-11-15  本文已影响0人  Goooooooooooal

Eureka Server

Eureka分为Eureka Server和Eureka Client
Eureka Server是服务注册中心,提供服务注册功能;Eureka Client可以从Eureka Server获取服务注册表;Eureka Server在向它注册的Eureka Client发生故障时,会将其从服务注册表中剔除
Eureka Server中存放1个服务注册表,它是1个双层的ConcurrentHashMap,key为服务的应用名,可以使用spring.application.name进行设置,value为1个Map,第2层Map的key为实例名,可以使用eureka.instance.instance-id进行设置,value是1个Lease对象,用来存放实力的ip,port,主页url,ping url,应用名,实例名等
在微服务系统中,为了提高系统处理能力,一般会对应用程序进行多实例部署,当大量的请求到来时,会对其进行负载均衡,路由到1个应用的多个实例上去进行处理。在Eureka Server上存储的服务注册表也体现了这1点,应用和实例是1对多的关系

Eureka Client

Eureka Client分为服务提供者和服务消费者,服务提供者向外暴露服务,供服务消费者调用,形成1个涉及到多个服务的调用链

  1. 向Eureka Server进行注册, register
  2. 向Eureka Server进行续约,告诉Eureka Server自己还活着 renew,默认30s
  3. 从Eureka Server上获取服务注册表的信息,并缓存在本地 fetch,默认30s
  4. 当Eureka Client下线时,会告诉Eureka Server,让其将自己从服务注册表中剔除 cancel,这个是主动下线,而Eureka Server会在Eureka Client发生故障时,将Eureka Client剔除,时被动下线
  5. 如果Eureka Client是服务消费者,它需要去访问服务消费者,这涉及到Ribbon,因为Feign也是基于Ribbon的

SpringCloud对Netflix的EurekaClient进行了封装,运行时还是走的Netflix的业务逻辑。Netflix使用Eureka Client接口定义Eureka Client需要完成的注册、续约、获取和下线工作,并使用Discovery Client类进行类实现。SpringCloud中使用EurekaDiscoveryClient来完成启动时逻辑,EurekaDiscoveryClient持有1个Netflix的Eureka Clinet对象,SpringCloud运行时,还是去调用Netflix的业务逻辑

使用@EnableEurekaClient注解来标注SpringBoot主类,启动时,会去jar包下的META-INF文件夹下找到spring.factories文件,该文件存放着Eureka Client启动需要注入到Spring容器的依赖Bean。Netflix的DiscoveryClient类对Eureka Client启动时需要做的事情做了规定,初始化时,它会创建1个定时任务线程池ScheduledThreadPoolExecutor,每隔一段时间,使用心跳线程向Eureka Server发送心跳,使用获取服务线程从Eureka Server拉取服务注册表,并缓存在本地

上一篇下一篇

猜你喜欢

热点阅读