0
点赞
收藏
分享

微信扫一扫

Nacos 源码分析02 注册

_LEON_ 2022-06-27 阅读 67

Nacos提供了服务注册的API接口,客户端只需要向该接口发送请求,即可实现服务注册

NacosServiceRegistryAutoConfiguration 负责自动装配

Nacos 源码分析02  注册_ide

核心实现如下

@Override
public void register(Registration registration) {
// 判断serviceId是否为空,也就是spring.application.name不能为空
if (StringUtils.isEmpty(registration.getServiceId())) {
log.warn("No service to register for nacos client...");
return;
}
// 获取Nacos的命名服务,其实就是注册中心服务
NamingService namingService = namingService();
// 获取 serviceId 和 Group
String serviceId = registration.getServiceId();
String group = nacosDiscoveryProperties.getGroup();
// 封装服务实例的基本信息,如 cluster-name、是否为临时实例、权重、IP、端口等
Instance instance = getNacosInstanceFromRegistration(registration);

try {
// 开始注册服务
namingService.registerInstance(serviceId, group, instance);
log.info("nacos registry, {} {} {}:{} register finished", group, serviceId,
instance.getIp(), instance.getPort());
}
catch (Exception e) {
if (nacosDiscoveryProperties.isFailFast()) {
log.error("nacos registry, {} register failed...{},", serviceId,
registration.toString(), e);
rethrowRuntimeException(e);
}
else {
log.warn("Failfast is false. {} register failed...{},", serviceId,
registration.toString(), e);
}
}
}

NacosNamingService 提供服务注册和订阅能力

@Override
public void registerInstance(String serviceName, String groupName, Instance instance) throws NacosException {
NamingUtils.checkInstanceIsLegal(instance);
clientProxy.registerService(serviceName, groupName, instance);
}

调用proxy的注册服务registerService实现,如下

Nacos 源码分析02  注册_ide_02

先获取client,分成grpc和http两种实现

Nacos 源码分析02  注册_ide_03

然后注册服务,先看下grpc的实现

Nacos 源码分析02  注册_封装_04

1.先缓存到cache

2.执行注册流程,如下图

Nacos 源码分析02  注册_数据_05

2.1 可以看到是grpcClient发送请求到服务server端注册,如下图实现

Nacos 源码分析02  注册_ide_06

2.2 然后更新本地内存redoData数据,设置为已经注册

Nacos 源码分析02  注册_ide_07


再看下http协议的实现

Nacos 源码分析02  注册_数据_08

按照域名 调用server端,或者没有域名,就随机选择一个server,调用

callServer进行注册

Nacos 源码分析02  注册_数据_09

也是执行一个http调用,发送注册请求到server端

Nacos 源码分析02  注册_数据_10

++++++++++++++++++++++++++++++++++++++++++++

继续看下server端处理注册InstanceControllerV2的register方法

Nacos 源码分析02  注册_数据_11





举报

相关推荐

0 条评论