文章目录
- 前言
- 一、Spring Cloud整合Eureka Client
- 1.1 @EnableEurekaClient注解
- 1.2 spring.factories文件
- 1.3 EurekaClientAutoConfiguration自动装配类
- 1.4 CloudEurekaClient构造方法
- 1.5 DiscoveryClient构造方法
- 1.6 DiscoveryClient#fetchRegistry
- 1.7 DiscoveryClient#getAndStoreFullRegistry
- 1.8 AbstractJerseyEurekaHttpClient#getApplications
- 1.9 DiscoveryClient#initScheduledTasks(定时任务初始化)
- 总结
前言
本文讲解
spring cloud整合eureka client并初始化的逻辑。
一、Spring Cloud整合Eureka Client
1.1 @EnableEurekaClient注解
这里可以发现这个注解只是个标识,并无其他意义,真正的自动装配逻辑在
client的jar包中的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.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
这里重点关注创建了一个延迟任务,传入了自己,我们看下
InstanceInfoReplicator的run方法

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

总结
Eureka Client实例化有以下几个重点步骤
- 全量拉取注册表信息,放入本地
- 创建服务续约,增量拉取注册表,实例变更重新注册等一系列的定时任务
本文详细解析了SpringCloud整合EurekaClient的过程,从@EnableEurekaClient注解开始,深入到spring.factories配置,EurekaClientAutoConfiguration的自动装配,特别是DiscoveryClient的初始化,包括全量拉取注册表、服务续约定时任务和实例注册等关键步骤。这些步骤确保了服务的注册、发现和心跳维持等功能的正常运行。

376

被折叠的 条评论
为什么被折叠?



