跳到主要内容

(十一) Nacos Server之间的操作

文章目录

      • 1.ServiceManager#init()
      • 1.1 定时发送任务
      • 1.2 定时更新状态任务
      • 1.3 定时清除空service任务

1.ServiceManager#init()

 

    @PostConstruct
public void init() {


// 启动了一个定时任务:每60s当前Server会向其它Nacos Server发送一次本机注册表
// 本机注册表是以各个服务的checksum(字串拼接)形式被发送的
GlobalExecutor.scheduleServiceReporter(new ServiceReporter(), 60000, TimeUnit.MILLISECONDS);

// 从其它Nacos Server获取到注册表中的所有instance的最新状态并更新到本地注册表
GlobalExecutor.submitServiceUpdateManager(new UpdatedServiceProcessor());

if (emptyServiceAutoClean) {



Loggers.SRV_LOG.info("open empty service auto clean job, initialDelay : {} ms, period : {} ms",
cleanEmptyServiceDelay, cleanEmptyServicePeriod);

// delay 60s, period 20s;

// This task is not recommended to be performed frequently in order to avoid
// the possibility that the service cache information may just be deleted
// and then created due to the heartbeat mechanism

// 启动了一个定时任务:每30s清理一次注册表中的空service
// 空service,即没有任何instance的service
GlobalExecutor.scheduleServiceAutoClean(new EmptyServiceAutoClean(), cleanEmptyServiceDelay,
cleanEmptyServicePeriod);
}

try {


Loggers.SRV_LOG.info("listen for service meta change");
consistencyService.listen(KeyBuilder.SERVICE_META_KEY_PREFIX, this);
} catch (NacosException e) {


Loggers.SRV_LOG.error("listen for service meta change failed!");
}
}