需求分析
在nacos中存在两种健康检查机制:
- 客户端主动上报机制
- 服务器端主动下探机制
nacos中的健康检查机制无法设置,并且健康检查机制与nacos服务实例类型是相关的:
- 临时实例(非持久化实例):对应客户端主动上报机制
- 永久实例(持久化实例):对应服务器端主动下探机制
因此在这次主要是对临时实例的健康检查机制进行分析。
源码分析nacos心跳检查机制
在ServiceManager.createServiceIfAbsent方法中可以看到,根据名称空间Id和服务名得到service,然后将service放入manager并进行初始化
public void createServiceIfAbsent(String namespaceId, String serviceName, boolean local, Cluster cluster)
throws NacosException {
Service service = getService(namespaceId, serviceName);
if (service == null) {
Loggers.SRV_LOG.info("creating empty service {}:{}", namespaceId, serviceName);
service = new Service();
service.setName(serviceName);
service.setNamespaceId(namespaceId);
service.setGroupName(NamingUtils.getGroupName(serviceName));
// now validate the service. if failed, exception will be thrown
service.setLastModifiedMillis(System.currentTimeMillis());
service.recalculateChecksum();
if (cluster != null) {
cluster.setService(service);
service.getClusterMap().put(cluster.getName(), cluster);
}
service.validate();
putServiceAndInit(service);
if (!local) {
addOrReplaceService(service);
}
}
}
在ServiceManager.putServiceAndInit方法中可以看到service.init方法,对sercice进行了初始化
private