01. Nacos客户端-自动注册原理

Nacos 客户端自动注册

SpringBoot使用Nacos客户端,会加入以下依赖,如下图所示:

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

然后在启动时,会加载项目中所有的META-INF/spring.factories文件,如下图所示:

然后会加载这些配置类,其中 NacosServiceRegistryAutoConfiguration 包含了关键逻辑,如下图所示:

image-20231124111727020

在该配置类中,加载一个 NacosAutoServiceRegistration 的bean 到spring容器中,如下图所示:

image-20231124111833286

从它的类继承关系图,可以看出它是一个 ApplicationListener,即监听器

image-20231124112016852

它监听的事件类型为:WebServerInitializedEvent

image-20231124112147196

spring容器启动完毕后发布该事件,下图可见:

image-20231124112439542

image-20231124112631923

当事件发布,NacosAutoServiceRegistration 会执行onApplicationEvent方法,该方法NacosAutoServiceRegistration 未实现,在它的父类AbstractAutoServiceRegistration中,如下图所示:

image-20231124112939002

image-20231124113012145

image-20231124113134682

image-20231124113146152

经过一系列调用,最终调用到 this.serviceRegistry.register(getRegistration()),serviceRegistry有一个实现类,也是由最开始的自动配置类生成的 NacosServiceRegistry,如下图所示:

image-20231124113424581

最终会调用到 namingService.registerInstance,向服务端注册服务实例,调用的是NacosNamingService 的 registerInstance方法,如下图所示:

image-20231124113800921

调用serviceProxy.registerService,开始注册服务实例,其实就是构建请求参数,然后发起http请求到服务端,如下图所示:

image-20231124113846314

后面就是构建请求参数、请求头等内容,不过多赘述,最终调用nacos-server的 /v1/ns/instance

public String reqApi(String api, Map<String, String> params, Map<String, String> body, List<String> servers,
        String method) throws NacosException {
   

    params.put(CommonParams.NAMESPACE_ID, getNamespaceId());

    if (
  • 9
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值