根据前两章节的分析,我们知道eureka客户端通过创建DiscoveryClient对象调用构造方法来实现了register,renew, heartbeat, registries fetch的功能。
本章节主要分析registries fetch在源码中的实现。
Clinet端的处理逻辑
DiscoveryClient在构造方法中创建了一个cacheRefreshExecutor的守护线程池,核心线程数为1,默认cacheRefreshExecutorThreadPoolSize为2。
顺着源码往下看,该线程池启动操作在initScheduledTasks()方法中
private void initScheduledTasks() {
if (clientConfig.shouldFetchRegistry()) {
// registry cache refresh timer
int registryFetchIntervalSeconds = clientConfig.getRegistryFetchIntervalSeconds();
int expBackOffBound = clientConfig.getCacheRefreshExecutorExponentialBackOffBound();
cacheRefreshTask = new TimedSupervisorTask(
"cacheRefresh",
scheduler,
cacheRefreshExecutor,
registryFetchIntervalSeconds,//30秒
TimeUnit.SECONDS,
expBackOffBound,

本文深入分析了Eureka客户端如何fetch registries,通过DiscoveryClient的构造方法启动cacheRefreshExecutor线程池,执行refreshRegistry()方法。在fetchRegistry过程中,根据配置选择全量或增量更新服务注册信息,并通过http请求与服务端交互,更新本地服务列表。下篇将探讨server端的实现。

751

被折叠的 条评论
为什么被折叠?



