01.SpringCloudEurekaClient原理-SpringCloudEurekeClient原理分析
2023-06-14 20:11:35 1 举报
AI智能生成
Spring Cloud Eureka Client 原理
作者其他创作
大纲/内容
重要概念
InstanceInfo
一个 InstanceInfo 实例表示一个微服务主机
一个 InstanceInfo 实例表示一个微服务主机
lastUpdatedTimestamp
记录当前 instance 在 server 端被修改的时间戳
记录当前 instance 在 server 端被修改的时间戳
lastDirtyTimestamp
记录当前 instance 在 client 端被修改的时间戳
这个时间是在配置文件发生变更的时候才会修改
记录当前 instance 在 client 端被修改的时间戳
这个时间是在配置文件发生变更的时候才会修改
status
决定是否能够正常提供服务的属性
决定是否能够正常提供服务的属性
overriddenStatus
用户通过调用 API 的方式希望服务能够达到某种状态的期望值
用户通过调用 API 的方式希望服务能够达到某种状态的期望值
Application
一个 Application 实例保存着一个特定微服务的所有服务提供者实例
一个 Application 实例保存着一个特定微服务的所有服务提供者实例
Applications
客户端注册表,封装了来自 Eureka Server 的所有注册信息
客户端注册表,封装了来自 Eureka Server 的所有注册信息
EurekaClientAutoConfiguration
Spring Boot 提供的 SPI
Spring Boot 提供的 SPI
EurekaClientConfigBean
向容器中注入配置类
它读取 eureka.client 开头的配置属性
向容器中注入配置类
它读取 eureka.client 开头的配置属性
EurekaInstanceConfigBean
向容器中注入配置类
它读取 eureka.instance 开头的配置属性
向容器中注入配置类
它读取 eureka.instance 开头的配置属性
EurekaClient
向容器中注入配置类
实例类型是【CloudEurekaClient】
向容器中注入配置类
实例类型是【CloudEurekaClient】
DiscoveryClient#<init>
在构造方法里初始化组件
在构造方法里初始化组件
fetchRegistry(boolean forceFullRegistryFetch)
客户端一般需要拉取远程注册表
第一次这里传的是 false 客户端一般需要拉取远程注册表
判断是否需要全量拉取
比如说【客户端刚刚启动】或者【强制拉取远程配置】等
比如说【客户端刚刚启动】或者【强制拉取远程配置】等
getAndStoreFullRegistry()
拉取并存储全量配置
拉取并存储全量配置
queryClient.getApplications()
获取服务端的所有注册信息
利用 RestTemplate 完成拉取请求
获取服务端的所有注册信息
利用 RestTemplate 完成拉取请求
getAndUpdateDelta(applications)
拉取并存储增量配置
拉取并存储增量配置
updateDelta(delta)
这里有两类 Region:本地 Region 和 远程 Region
所以也有两类缓存:本地 Region 的缓存和远程 Region 的缓存
这里有两类 Region:本地 Region 和 远程 Region
所以也有两类缓存:本地 Region 的缓存和远程 Region 的缓存
register()
向注册中心注册服务
registrationClient.register()
利用 RestTemplate 完成注册请求
利用 RestTemplate 完成注册请求
initScheduledTasks()
初始化定时任务,包含 3 个任务
CacheRefreshThread
定时刷新注册表信息线程
fetchRegistry(true)
判断配置文件中的远程配置中心地址是否发生变化
如果发生了变化这里传的是 true
判断配置文件中的远程配置中心地址是否发生变化
如果发生了变化这里传的是 true
HeartbeatThread
定时发送心跳消息线程
renew()
续约发送心跳
续约发送心跳
registrationClient.sendHeartBeat()
利用 RestTemplate 发送续约请求
利用 RestTemplate 发送续约请求
InstanceInfoReplicator
启动实例信息复制器线程
discoveryClient.refreshInstanceInfo()
刷新客户端信息
刷新客户端信息
refreshDataCenterInfoIfRequired()
更新注册中心地址信息
refreshLeaseInfoIfRequired()
更新续约信息
discoveryClient.register()
如果信息发生变更,这里会重新注册
如果信息发生变更,这里会重新注册
shutdown()
服务关闭
服务关闭
cancelScheduledTasks()
取消定时任务
instanceInfoReplicator.stop()
停止实例信息复制器线程
停止实例信息复制器线程
heartbeatExecutor.shutdownNow()
关闭续约线程
关闭续约线程
cacheRefreshExecutor.shutdownNow()
关闭定时刷新注册表信息线程
关闭定时刷新注册表信息线程
scheduler.shutdownNow()
关闭定时刷新注册表的调度器线程
关闭定时刷新注册表的调度器线程
unregister()
向 server 发送服务下线请求
registrationClient.cancel()
利用 RestTemplate 发送服务下线请求
利用 RestTemplate 发送服务下线请求
服务下线
这是基于 SpringBoot 提供的 Endpoint
端点入口是【ServiceRegistryEndpoint】
这是基于 SpringBoot 提供的 Endpoint
端点入口是【ServiceRegistryEndpoint】
setStatus()
根据请求设置状态
根据请求设置状态
如果传入的状态是
CANCEL_OVERRIDE
CANCEL_OVERRIDE
cancelOverrideStatus()
向服务端发送【cancelOverrideStatus】请求
向服务端发送【cancelOverrideStatus】请求
其它状态则调用设置状态方法
setStatus()
利用 RestTemplate 向服务端发送【setStatus】请求
利用 RestTemplate 向服务端发送【setStatus】请求
0 条评论
下一页