Nacos服务注册过程中做了哪些事情

本文简单地介绍了nacos注册的过程,
包括:创建实例信息、组装心跳参数并发送请求、请求nacos服务端注册等。

*SpringCloud定义了服务注册的统一规范

SpringCloud不关注服务注册与发现的组件具体是哪一种,
例如eureka、consul、zookeeper、nacos,
它们接入SpringCloud都需要遵循spring-cloud-commons中的一系列规范。

*spring-cloud-commons

在这里插入图片描述

serviceregistry包

定义了服务注册的规范

discovery包

定义了服务发现的规范

loadbalancer包

定义了负载均衡的规范

*服务注册

AutoServiceRegistration

自动注册

Registration

约束注册信息

例如:ip、host、serviceid、协议等。

ServiceRegistry

包含服务注册register()、注销deregister()方法。

nacos实现

在这里插入图片描述

*nacos服务注册

NacosServiceRegistry实现了SpringCloud的ServiceRegistry接口,
负责将服务注册/注销至注册中心。

启动本地nacos服务

不熟悉的可以参照:Nacos 快速开始

在NacosServiceRegistry的register()这里打上断点

在这里插入图片描述

debug启动服务实例

在这里插入图片描述

*register()调用链路

在这里插入图片描述

NacosAutoServiceRegistration.bind(WebServerInitializedEvent)

看到bind方法之上的注解:@EventListener(WebServerInitializedEvent.class),
我们知道服务注册是在WebServer实例初始化完成时发生的,
从这里往下看去。
在这里插入图片描述

NacosAutoServiceRegistration.start()

在这里插入图片描述

NacosAutoServiceRegistration.register()

在这里插入图片描述

AbstractAutoServiceRegistration.register()

在这里插入图片描述

*NacosServiceRegistry.register(Registration)

创建服务实例

Instance instance = new Instance();
instance.setIp(registration.getHost());
instance.setPort(registration.getPort());
instance.setWeight(nacosDiscoveryProperties.getWeight());
instance.setClusterName(nacosDiscoveryProperties.getClusterName());
instance.setMetadata(registration.getMetadata());

调用namingService注册

try {
	namingService.registerInstance(serviceId, instance);
	log.info("nacos registry, {} {}:{} register finished", serviceId,
			instance.getIp(), instance.getPort());
}

namingService.registerInstance(serviceId, instance)
在这里插入图片描述
这个registerInstance方法做了两件事情:

1、
如果是临时实例,组装心跳信息并加载到心跳执行器beatReactor,
查看源码得知beatReactor构造方法中启动了一个ScheduledThreadPoolExecutor,
主要任务是通过定时任务使用http向nacos发送心跳请求。
在这里插入图片描述
2、
通过服务代理serverProxy向nacos注册。
在这里插入图片描述
然后我们就可以在nacos控制台看到多出了一个服务实例
在这里插入图片描述
在这里插入图片描述

如有不当之处,还请指正!

参考资料:

牧_风Nacos服务注册原理解析
若相惜、補棄nacos服务注册流程
Errol的杂货铺Nacos初探(2)-- 服务注册原理解析
Programer HaiSpringCloudAlibaba-Nacos服务注册的原理
随风去。Nacos 服务注册的原理

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值