Spring-Cloud-Eureka - 注解式启动注册中心

213 阅读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-eureka-server注解式启动注册中心


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-server注解式启动注册中心

spring-cloud-starter-eureka-server项目,就是封装了对eureka-server相关的一些依赖,依赖了spring-cloud-netflix-eureka-server的项目,github.com/spring-clou…

@EnableEurekaServer注解

@EnableEurekaServer注解,这个注解实际上来说就在spring boot跑起来一个内嵌的tomcat容器之后,就将eureka server在tomcat内部给启动起来了。@EnableEurekaServer注解,基于spring boot auto configuration机制,将我们需要的所有的Bean,通过扫描项目依赖的三方jar包下的spring.factories文件,加载配置好的自动装置类的全限定名,都给配置好。

EurekaServerAutoConfiguration

EurekaServerAutoConfiguration,依托spring boot的auto configuration机制。使用注解@EnableEurekaServer,触发了EurekaServerAutoConfiguration的执行,直接一站式将我们需要的eureka server给初始化和启动。

在spring boot启动web容器之后,然后依托@EnableEurekaServer注解,来执行原来BootStrap中的所有的代码逻辑,初始化所有需要的代码组件,然后完成eureka server的启动和初始化。

EurekaServerConfigBean,实现了EurekaServerConfig接口,相当于将spring boot风格的配置,application.yml风格的配置,全部用EurekaServerConfigBean来表示配置相关的持有类以及加载。

InstanceRegistry,是对注册表的封装,在注册、下线的时候,会先通过这个类,然后将请求转发给eureka自己的注册表类,PeerAwareInstanceRegistryImpl类。

eureka在实例化EurekaServerConfig、EurekaClientConfig、EurekaInstanceConfig的时候,是从eureka-client.properties,eureka-server.properties中去读取配置信息。

spring cloud环境中,EurekaServerConfig、EurekaClientConfig、EurekaInstanceConfig,是从application.yml中读取,读取之后由spring cloud封装的对象去对外提供配置项的读取。

读取aplication.yml中eureka相关的配置,构造EurekaServerConfig、EurekaClientConfig、EurekaInstanceConfig,然后构造ServerCodes,构造InstanceInfo,构造ApplicationInfoManager。

EurekaServerInitializerConfiguration

EurekaServerInitializerConfiguration implements ServletContextAware, SmartLifecycle, Ordered

SmartLifecycle:当Spring容器加载所有bean并完成初始化之后,会接着回调实现该接口的类中对应的方法(start()方法)

spring boot启动之后,执行EurekaServerInitializerConfiguration.start()方法。启动一个后台线程,完成eureka server上下文初始化、注册表同步、注册监视器等初始化。

EurekaServerAutoConfiguration、EurekaServerInitializerConfiguration、EurekaServerBootstrap,三个类,在spring boot启动之后,完成了原来BootStrap初始化和启动eureka server的几乎一模一样的所有的代码逻辑。

唯一的区别,就是比如说读取配置,变成从application.yml中去读取,然后有几个类稍微变成了自己的实现类,继承了eureka的父类。稍微做了一点点的封装(适配器)。