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