Eureka Client源码分析
2021-07-02 15:13:10 3 举报
此图是我对Eureka client源码的理解,供大家学习交流
作者其他创作
大纲/内容
将新的实例写入注册表的数据map中
主动失效读写缓存里的数据
调用服务端Jersey接口获取全量注册信息
首次全量更新
注册接口
初始化eurekaClient的相关配置
responseCache.get(cacheKey)
scheduler.schedule()
DiscoveryClient#renew()
注册
调用服务端获取全量实例的http接口
useReadOnlyResponseCache = true
EurekaDiscoveryClientConfiguration
discoveryClient.register()
ApplicationResource#addInstance
存入本地缓存
初始化定时拉取服务注册信息和服务续约任务
eurekaTransport.queryClient.getDelta(remoteRegionsRef.get())
获取服务(get registry)
包装
清理缓存
getAndUpdateDelta(applications)
!reconcileHashCode.equals(delta.getAppsHashCode())
首先从只读缓存里获取
EurekaClientAutoConfiguration
服务端服务续约接口:InstanceResource#renewLease
读写缓存默认180秒会自动过期
Marker
激活
run()
run()调用
scheduler.schedule
@Bean
ApplicationsResource#getContainers
localRegionApps.set(this.filterAndShuffle(apps))
HeartbeatThread
EurekaClient
readOnlyCacheMap.get(key)
EurekaClientConfigBean
@AutoConfigureAfter
CacheRefreshThread
instanceInfoReplicator.start()
从缓存中获取
通过hashcode判断客户端和服务端实例集合数据一致性
回写只读缓存
读写缓存没有就直接从内存注册表里获取
refreshRegistry()
只读缓存中没有就从读写缓存中获取
客户端实例集合和服务端实例集合hashcode不一致
调用
调用服务端注册http接口
readWriteCacheMap.get(key)
updateDelta(delta)
任务线程
@ConditionalOnBean(EurekaDiscoveryClientConfiguration.Marker.class)
服务端服务注册接口:ApplicationResource#addInstance
服务注册(register)
初始化定时服务注册任务
调用服务端获取增量实例http接口
registry.getApplications()
服务定时续约线程
@Bean 初始化很多bean
增量更新
timer.schedule每隔30秒执行getCacheUpdateTask()定时任务将读写缓存中的数据更新到只读缓存中
getAndStoreFullRegistry()
合并到本地缓存
DiscoveryClient#initScheduledTasks()
获取注册信息接口
fetchRegistry(boolean forceFullRegistryFetch)
返回的增量实例集合delta携带服务端实例集合的hashcode
调用服务端接收心跳http接口
容器启动时会注册spring-cloud-netflix-eureka-client-2.1.3.RELEASE.jar/META-INF/spring.factories 文件中EnableAutoConfiguration对应的EurekaClientAutoConfiguration
DiscoveryClient
定时更新服务注册列表线程
readWriteCacheMap.invalidate(key)
TimedSupervisorTask
eurekaTransport.registrationClient.register(instanceInfo)
eurekaTransport.queryClient.getApplications(remoteRegionsRef.get())
服务续约(renew)
全量接口:http://www.eureka8761.com:8761/eureka/apps服务端端口eureka-core.jar: ApplicationsResource#getContainers增量接口:http://www.eureka8761.com:8761/eureka/apps/deltaApplicationsResource#getContainerDifferential
0 条评论
回复 删除
下一页