Spring Cloud Eureka源码分析

Eureka总体概览

我们先看一段官网的介绍:

Spring Cloud Eureka源码分析

服务发现是基于微服务架构的关键原则之一。试图手工配置每个客户端或某种约定俗成的形式,可能很难做到,而且会很脆。Eureka就是Netflix服务发现服务端和客户端。服务端可以被配置和部署成高可用,每个服务器都可以将注册服务的状态复制到其他服务器上。

Eureka的关键核心概念

Eureka服务治理有一些核心概念,今天将从源码中剖析Eureka Client的核心概念

  • 服务注册
  • 服务续约
  • 客户端从注册中心获取服务列表

自动装配的主入口

要使用eureka的客户端,需要引入一下依赖就可以了

Spring Cloud Eureka源码分析

我们找到spring-cloud-netflix-eureka-client包的spring.factories文件,然后查看该文件内容

Spring Cloud Eureka源码分析

 

我们主要看EurekaClientAutoConfiguration这个类,这个是eureka客户端自动装配的主要配置类,负责Eureka关键Beans的配置和初始化

Spring Cloud Eureka源码分析

 

这个类向Spring容器注册了两个重要的实例:

  • EurekaClientConfigBean    :装配Bean

Spring Cloud Eureka源码分析

 

  •  CloudEurekaClientEureka   :与Server交互的工具类

Spring Cloud Eureka源码分析

 

@EnableEurekaClient注解

@EnableEurekaClient注解,在最新的版本上好像没有像以前的版本导入什么类或者实例了,很奇怪。

Spring Cloud Eureka源码分析

工具类DiscoveryClient介绍与作用

前面看到的实例化的CloudEurekaClient继承了DiscoveryClient,而DiscoveryClient是与Eureka Server交互的工具类。主要有四大作用:

1.用Eureka服务器注册实例  

2 与Eureka服务器续租

3.关机期间取消Eureka服务器的租约

4.查询在Eureka服务器上注册的服务/实例列表。

 

这些功能的实现主要在DiscoveryClient的初始化的方法内,接下来就去初始化方法看看:

 

  • 客户端从注册中心获取服务列表

Spring Cloud Eureka源码分析

Spring Cloud Eureka源码分析

 

当第一次或者增量不可用的时候,使用getAndStoreFullRegistry拉取全量  否则的话,使用getAndUpdateDelta拉取增量

  • 服务注册

Spring Cloud Eureka源码分析

Spring Cloud Eureka源码分析

 

  • initScheduledTasks()进行续约

该方法用于初始化所有计划任务,包括cluster resolvers, heartbeat, instanceInfo replicator, fetch

下面是通过Heartbeat timer进行续约

Spring Cloud Eureka源码分析

Spring Cloud Eureka源码分析

Spring Cloud Eureka源码分析

 

总结

  • Eureka Client是自动进行装配的

  • EurekaClientAutoConfiguration负责装配
  • DiscoveryClient负责与Server进行交互,实现服务注册,拉取和续约

Spring Cloud Eureka源码分析