EurekaClient 源码核心
2021-10-10 16:46:08 11 举报
eureka客户端源码分析
作者其他创作
大纲/内容
response
注册
@EnableAutoConfiguation
selectImport 方法
read.lock()
@Bean
discoveryClient.register();
font color=\"#9c27b0\
scheduler.schedule();
任务线程
initScheduledTasks()
心跳检测
处理post 请求
CacheRefreshThread
@AutoConfigureAfter
eurekaTransport.registrationClient.register(instanceInfo)
在 DiscoveryClient 构造方法中被调用
fetchRegistry(boolean forceFullRegistryFetch)
scheduler.schedule()
如果客户端实例集合的 hashCode 与服务端实例集合的 hashcode不一致
服务注册
if (!reconcileHashCode.equals(delta.getAppsHashCode()) || clientConfig.shouldLogDeltaDiff())
run() 调用
EurekaDiscoveryClientConfiguration
refreshRegistry()
PeerReplicationResource
dispatch(instanceInfo)
定时更新服务注册列表线程
EurekaClientConfigBean,初始化eureka 客户端配置,用户可通过 application.yml 修改配置
扫描到 har 包spring-cloud-netflix-eureka-client中的 Spring.factories文件,其中有一个EurekaClientAutoConfiguration 自动配置类
组合注解
发送服务心跳检测
getAndUpdateDelta(applications)
初始化定时服务注册任务
DiscoveryClient (org.springframework.cloud.client.discovery),这个是 springboot 整合 eureka 后使用的 eureka 客户端,需要先拿到 eureka 自己的客户端,也就是 EurekaClient,实例化一个 EurekaDiscoveryClient,是对 EurekaClient 原生封装,需要把 EurekaClient 作为参数传入,
@InjectDiscoveryClient( span style=\"font-size: inherit;\
根据实例 action 判断是注册还是心跳续约还是下线操作
discoveryClient.renew()
HeartbeatThread
获取服务
以后增量更新
Applications
eurekaTransport.registrationClient.sendHeartBeat(font color=\"#9c27b0\
EurekaClientAutoConfiguration
TimedSupervisorTask(是一个Runnable接口)
read.unlock()
心跳续约
参数注入,将 eureka 客户端封装成 springboot 使用的 eurekaDiscoveryClient
AutoConfigurationImportSelector
首次拉取全量更新
@Import
存入本地缓存
font color=\"#f57c00\
扫描所有 jar 包中的 spring.factories 文件
计算所有实例的 hashCode
eurekaTransport.queryClient.getApplications( remoteRegionsRef.get())
开始拉取注册表
线程启动,调用 run()
instanceInfoReplicator.start(clientConfig.getInitialInstanceInfoReplicationIntervalSeconds());
getAndStoreFullRegistry();
@SpringbootApplication
激活
发送服务注册请求到 eureka server
Register、Heartbeat、Cancel、StatusUpdate、DeleteStatusOverride
初始化定时拉取服务中注册信息和服务续约任务
handleHeartbeat()
合并到本地缓存
调用服务端获取增量实例 http 接口
重点在 DiscoveryClient 的构造方法中
RESPONSE
getReconcileHashCode(applications)
batchReplication(ReplicationList replicationList)
handleRegister()
eurekaTransport.queryClient.getDelta( remoteRegionsRef.get())
@ConditionalOnBean(EurekaDiscoveryClientConfiguration.Marker.class) 激活 EurekaClientAutoConfiguration
InstanceInfoReplicator(Runnable 接口)
服务续约
添加服务实例
配置 Maker,此 Maker为EurekaDiscoveryClientConfiguration 的 内部类
EurekaClient,实例化的是他的子类 DiscoveryClient (com.netflix.discovery)的子类 CloudEurekaClient
调用服务端获取全量实例 http 接口
调用服务端注册 http 接口
0 条评论
下一页