springcloud 微服务组件eureka 之源码分析(十三)

tech2022-07-09  200

从这篇我们开始分析springcloud 组件源码,相关组件有:eureka、ribbon、hystrix、feign、zuul、config、actuator等。今天分析eureka源码。

1、通过SPI 加载 spring.factories 如图:找到相关客户端jar包和相关实现类

 

 

2、重点看这里:点击  EurekaClientAutoConfiguration,

发现客户端配置的相关方法 

 这个是一个重要入口:

 3、点击进入,看该类的父类 DiscoveryClient

 

 5、点击进入:这是一个客户端最重要的类,做服务注册用。

启动eureka 客户端时直接进入这个方法

 中间有三个核心点:

 

 

 

接着看下面一个方法: 

6、服务续约保活 拉取:对应配置文件:

#是否从eureka中拉取注册信息

eureka.client.fetchRegistry=true

点击  shouldFetchRegistry()

 

 继续往下看:对应配置注册和续约  ,然后心跳

#服务续约,心跳的时间间隔 eureka.instance.lease-renewal-interval-in-seconds=30

 

点击renew:如果没发现服务,则启动注册方法 register()

 

 7、点击 register  ,ctrl+t  选择进入,这个方法就会发送post  把客户端信息注册到eureka服务端。

端服务注册的地址

服务注册的节点信息

 

 

3、refreshRegistry 里面的 fetchRegistry 方法  全量拉取和增量拉取

4、从服务器获取服务列表后换成到 localRegionApps 中,后面 ribbon、feign、config、zuul 都用  到了这个 localRegionApps  getApplications 方法调用,最终会走到这个类用 get 请求调用到 eureka 服务端 

对应的请求地址:

5、服务注册和续约

6、6、先看看 register 方法,服务注册,最终会掉到该类:  Post 请求到服务

7、在看看服务续约中的 sendHeartBeat 方法  Put 请求

请求信息,心跳只是把节点状态发送到了服务端

 

二、Eureka 服务端源码 

1、先找jar 

eureka 服务端是通过 JAX-RS 规范接收客户端的Http请求的

 

 

 

2、接收服务注册的方法

然后进入这个接收post的方法 

核心方法保存到服务本地 

3、接着看 register 方法  两件事,A、把客户端传递过来的节点信息报错到本地服务列表                 B、把该 eureka 的信息复制到其他 eureka 节点上 

这两件事不是原子操作,只能保证可用性和分区容错性!不能保证一致性

点击super.register 并且 ctrl+t ,进入后找到,保存客户端服务列表

对应的服务端注册信息如下:  Key 是对应的服务名称,value 则是这个服务对应的服务列表信息

复制 eureka 的节点信息到其他节点  ,点击  replicateToPeers

所有节点循环

 

 接收续约心跳的方法

三  、服务拉取:对应配置文件:

 

1、#是否从eureka中拉取注册信息

eureka.client.fetchRegistry=true

 点击  fetchRegistry  方法进入

 两种拉取方式  :全量和增量

点击全量拉取

这个变量和rebbon  相关,记好:

2、get方法拉取列表 

 

服务列表拉取已经完成!

到这里eureka源码分析完毕,从三个角度分析的:1、客户端服务注册 post  、2:服务端接收客户端注册请求并注册和复制、3:客户端服务列表拉取。当然还有服务列表清除、服务下线、自我保护等源码都包涵在这三个流程里。大家平日按照这个思路多看源码、多思考、多理解,很快就会熟练的。下篇我们分析ribbon 源码,敬请期待!

最新回复(0)