Eureka 客户端源码
2021-10-10 12:48:49 1 举报
Eureka 客户端源码
作者其他创作
大纲/内容
客户端和服务端的哈希码比对
读写缓存没有会调用回调方法拿
#LoadingCachereadWriteCacheMap.get(key读写缓存默认180秒过期
refreshRegistry更新注册列表
重新计算和设置一致性hashcode
@AutoConfigureAfter
调用服务端注册接口http
getAndStoreFullRegistry()全量更新
获取本地缓存的服务列表信息
CacheRefreshThread()30s一次
instanceInfoReplicator.start()
否
表示先加载完EurekaDiscoveryClientConfiguration然后在加载EurekaClientAutoConfiguration
PeerAwareInstanceRegistry
清理缓存主动实现读写缓存中的数据
构造方法初始化时启动了一个定时任务每30秒将读写缓存的数据更新到只读缓存
run调用
HeartbeatThread30s一次
addInstance
调用服务端增量拉取http接口
ResponseCacheImpl.generatePayload
刷新当前本地实例信息
服务定时续约线程
EurekaClientConfigBean初始化客户端配置
localRegionApps.set(this.filterAndShuffle(apps));本地缓存
DiscoveryClient.this.renew()
readOnlyCacheMap.get(key)
同步注册信息到集群其它节点
scheduler.schedule()
registry.register服务端注册方法
调用run方法
CAS成功,才会存入本地缓存是一个AtomicReference实例
getAndUpdateDelta(applications)增量更新
TimedSupervisorTask Runnable接口
DiscoveryClient核心类,续约,注册,心跳等等
updateInstanceRemoteStatus();
new Marker()
计算出服务实例对应的缓存key从多级缓存中获取ResponseCacheImpl
applications.setAppsHashCode(applications.getReconcileHashCode());
eurekaTransport.registrationClient.register(instanceInfo);
getContainers获取注册信息接口
fetchRegistry(boolean forceFullRegistryFetch)
super.register
delegate.register(info)服务注册
new CloudEurekaClient
循环同步到集群所有节点
EurekaClientAutoConfiguration
initScheduledTasks
super父类构造方法
2.初始化定时服务注册任务
调用服务端接口 ApplicationResource
更新远程服务实例运行状态
开启上面3个线程池
加载客户端自动配置类初始化了很多bean
scheduler.schedule(this);调用当前线程类的run方法
reconcileHashCode.equals(delta.getAppsHashCode())返回增量更新数据时,也会返回服务端的一致性哈希码判断计算出的哈希吗和服务端哈希吗是否一致如果不一致,就需要做一次全量更新
eurekaTransport.queryClient.getApplications(remoteRegionsRef.get())
\t@Bean
服务续约发送心跳给服务端http接口使用Jersey框架
EurekaDiscoveryClientConfiguration
读写缓存没有就从注册表拿
SpringBoot项目启动
CAS来确保请求发起到现在是线程安全
线程名cacheRefresh
EurekaHttpClient#sendHeartBeat()服务续约
invalidateCache
生成一致性哈希码
只读缓存没有 从读写缓存中过拿然后回写到只读缓存
replicateToPeers
EurekaClient初始化
getApplications
1.是否禁用增量更新;2.是否对某个region特别关注;3.外部调用时是否通过入参指定全量更新;4.本地还未缓存有效的服务列表信息;
replicateInstanceActionsToPeers
1.定时拉取服注册信息和服务续约任务
回写只读缓存
定时更新服务注册列表线程
updateDelta(delta)增量更新本地缓存,加锁的方式更新
discoveryClient.register()
激活
refreshInstanceInfo
满足其中一个条件全量拉取
onCacheRefreshed()
判断多个条件执行全量更新还是增量更新
调用
timer.schedule(getCacheUpdateTask()
eurekaTransport.queryClient.getDelta(remoteRegionsRef.get())
服务注册EurekaHttpClientDecorator
完成注册信息的更新
getReconcileHashCode(applications)
通知刷新本地缓存事件
调用服务端全量拉取http接口
ApplicationsResource
创建3个线程池1.定时任务线程池2.心跳检查线程池3.缓存刷新线程池
首先从只读缓存中拿ConcurrentMap
AbstractJerseyEurekaHttpClient
一致性哈希码不同 就执行全量更新
responseCache.get(cacheKey)
DiscoveryClient
PeerAwareInstanceRegistryImpl将新的实例写入服务端的注册表中map
扫描所有jar包的spring.factory文件中EnableAutoConfiguration对应的实现类
0 条评论
回复 删除
下一页