Eureka源码解析——客户端初始化

本文详细解析了SpringCloud整合EurekaClient的过程,从@EnableEurekaClient注解开始,深入到spring.factories配置,EurekaClientAutoConfiguration的自动装配,特别是DiscoveryClient的初始化,包括全量拉取注册表、服务续约定时任务和实例注册等关键步骤。这些步骤确保了服务的注册、发现和心跳维持等功能的正常运行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


前言

本文讲解spring cloud整合eureka client并初始化的逻辑。


一、Spring Cloud整合Eureka Client

1.1 @EnableEurekaClient注解

这里可以发现这个注解只是个标识,并无其他意义,真正的自动装配逻辑在clientjar包中的spring.factories文件中。

在这里插入图片描述

1.2 spring.factories文件

这里发现自动装配了一些类,我们重点关注EurekaClientAutoConfiguration

在这里插入图片描述

1.3 EurekaClientAutoConfiguration自动装配类

这里装配了很多组件,我们重点关注一下这个内部的配置类,这个ApplicationInfoManager就是管理当前实例的相关信息,重点在这里会装配一个EurekaClient,我们看下他的构造方法

在这里插入图片描述

1.4 CloudEurekaClient构造方法

这里会设置一些属性,重点是调用父类的构造方法

在这里插入图片描述

1.5 DiscoveryClient构造方法

逻辑非常多,但重要步骤就两个:
1.去全量拉取注册表信息
2. 初始化相关的定时任务(增量拉取,服务续约)

在这里插入图片描述
在这里插入图片描述

1.6 DiscoveryClient#fetchRegistry

根据是否开启增量来判断进行全量拉取还是增量拉取,如果没启用增量或者是第一次拉取或者本地注册表时空的那么都会调用全量拉取注册表接口。

在这里插入图片描述

1.7 DiscoveryClient#getAndStoreFullRegistry

这里就是调用网络通信组件来发起网络请求了,这里默认是AbstractJerseyEurekaHttpClient

在这里插入图片描述

1.8 AbstractJerseyEurekaHttpClient#getApplications

这里发现是调用服务端的/apps接口,也就对应之前我们讲解服务端的全量拉取接口。

在这里插入图片描述

1.9 DiscoveryClient#initScheduledTasks(定时任务初始化)

这里重要有三个步骤:

  1. 初始化增量拉取注册表定时任务
  2. 初始化客户端发送心跳定时任务
  3. 服务注册

在这里插入图片描述

1.9.1 CacheRefreshThread#run

这里直接调用了DiscoveryClient#refreshRegistry方法
在这里插入图片描述

1.9.1.1 DiscoveryClient#refreshRegistry

这里最终还是调用了fetchRegistry方法来进行远程拉取

在这里插入图片描述

1.9.2 HeartbeatThread#run

这里走的是renew方法请求服务续约,成功后会更新lastSuccessfulHeartbeatTimestamp字段

在这里插入图片描述

1.9.2.1 DiscoveryClient#renew

这里续约请求的接口就是apps/{appName}/{instanceId},对应服务端的续约接口。

在这里插入图片描述

1.9.3 InstanceInfoReplicator$#start

这里重点关注创建了一个延迟任务,传入了自己,我们看下InstanceInfoReplicatorrun方法

在这里插入图片描述

1.9.3.1 InstanceInfoReplicator$#run

判断dirtyTimestamp不是null的话,调用register 方法进行服务注册,这个时间戳肯定不是null的, instanceInfo.setIsDirty();我们上面这个方法就是设置了这个时间戳。最后又将这个任务放入延时调度中。
其实这个定时任务是为了检测服务信息有没有变动,如果有变动重新注册到Eureka Server上去。

在这里插入图片描述

总结

Eureka Client实例化有以下几个重点步骤

  1. 全量拉取注册表信息,放入本地
  2. 创建服务续约,增量拉取注册表,实例变更重新注册等一系列的定时任务
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值