根据前两章节的分析,我们知道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秒
Tim