Spring-Cloud-Eureka - 注解式启动服务实例

84 阅读3分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。


Netflix Eureka 目录汇总

  1. eureka server启动以及初始化

  2. eureka client启动以及初始化

  3. 服务注册

    3.1 可重入读写锁-读锁

  4. 服务发现

    4.1. 全量抓取注册表

    4.2. 注册表多级缓存机制

    4.3. 注册表多级缓存过期机制(主动、定时、被动)

    4.4. 增量抓取注册表

     4.4.1. 一致性Hash对比机制
    
     4.4.2. 可重入读写锁-写锁
    
  5. 服务续约

  6. 服务下线

  7. 服务故障自动感知及服务实例自动摘除

  8. 自我保护机制

  9. Eureka Server集群注册表同步及高可用

  10. Eureka Server集群注册表同步使用的三层队列批处理机制

  11. spring-cloud-netflix-eureka-server注解式启动注册中心

  12. spring-cloud-netflix-eureka-client注解式启动服务实例


Netflix Eureka 时间间隔简要

服务注册(延迟40秒执行注册逻辑)

服务发现-

读写缓存-定时过期(180秒)

只读缓存-被动过期(30秒(整30秒))

定时抓取增量注册表(30秒)

定时删除超过3分钟的服务实例变更记录(30秒)

服务续约(30秒)

服务下线

服务故障自动感知及服务实例自动摘除(感知:90秒(BUG:90 * 2秒);摘除:60秒)

自我保护机制

每分钟期望的续约次数 & 每分钟期望的续约次数阈值(15分钟)

MeasuredRate renewsLastMin(60秒)

Eureka Server集群信息更新(10分钟)


spring-cloud-eureka-client注解式启动服务实例

自动装配EnableAutoConfiguration

org.springframework.cloud:spring-cloud-netflix-eureka-client:2.2.1.RELEASE

./META-INF/spring.factories
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
org.springframework.cloud.netflix.eureka.config.EurekaClientConfigServerAutoConfiguration,\
org.springframework.cloud.netflix.eureka.config.EurekaDiscoveryClientConfigServiceAutoConfiguration,\
org.springframework.cloud.netflix.eureka.EurekaClientAutoConfiguration,\
org.springframework.cloud.netflix.ribbon.eureka.RibbonEurekaAutoConfiguration,\
org.springframework.cloud.netflix.eureka.EurekaDiscoveryClientConfiguration,\
org.springframework.cloud.netflix.eureka.reactive.EurekaReactiveDiscoveryClientConfiguration,\
org.springframework.cloud.netflix.eureka.loadbalancer.LoadBalancerEurekaAutoConfiguration

org.springframework.cloud.bootstrap.BootstrapConfiguration=\
org.springframework.cloud.netflix.eureka.config.EurekaDiscoveryClientConfigServiceBootstrapConfiguration

EurekaClientAutoConfiguration

EurekaClientConfigBean,从application.yml中,将配置项读取出来,通过EurekaClientConfigBean对外提供所有的eureka client相关的配置项的读取。实现的就是EurekaClientConfig接口。

EurekaInstanceConfigBean,同理,加载application.yml中的服务实例相关的配置项。

EurekaClientAutoConfiguration,完成DiscoveryClient的构造和初始化,eureka client初始化和启动的流程,全部在DiscoveryClient中的。EurekaDiscoveryClient,对eureka原生的DiscoveryClient进行了一层封装,实现eureka的DiscoveryClient接口。

EurekaAutoServiceRegistration,将InstanceInfoReplicator组件里面的服务注册的逻辑,进行了一定的封装。在这里提供了服务注册的一些方法。

生命周期接口SmartLifecycle

EurekaAutoServiceRegistration implements AutoServiceRegistration, SmartLifecycle, Ordered, SmartApplicationListener

原生的eureka client的注册里,eureka client启动之后,要延迟40秒,才会去完成注册。EurekaAutoServiceRegistration,里面包含了一个start()方法,在这个spring boot启动之后,直接就会执行start()方法,一启动,直接就去执行注册。

EurekaRegistration包含了一些组件,EurekaClient、ApplicationInfoManager之类的组件。

ApplicationInfoManager.setInstanceStatus()调用的时候,会通知自己所有的注册的监听器,状态发生改变。DiscoveryClient.initScheduledTasks()方法的时候,会给ApplicationInfoManager注册一个监听器,在DiscoveryClient初始化的时候就会调用注册监听器,通知InstanceInfoReplicator.onDemandUpdate()方法。

调用DiscoveryClient.register()方法,完成一个服务的注册。

@EnableEurekaClient

@EnableEurekaClient,其实没什么用。完全可以不实用,只需要导入spring-cloud-netflix-eureka-client包就可以了。

SpringBoot项目启动的时候,会扫描加载所有jar包下的META-INF/spring.factories文件内配置的EnableAutoConfiguration,通过自动装配机制注入启动netflix-eureka-client所需要的一切。

通过自动装配机制触发EurekaClientAutoConfiguration类的执行,完成从application.yml中读取配置,完成DiscoveryClient的初始化和启动,通过自己额外加的一些代码,一启动,直接触发一次register()服务注册,向eureka server完成一次注册。