Nacos客户端自动注册工作原理剖析(三)

一、前景概要

回顾上一章节的nacos环境搭建,我们分别构建了两个基于nacos注册中心注册的微服务demo-a,demo-b,同时也在微服务启动完成后看到nacos控制台多了两个服务实例列表:

那么究竟他们是如何注册上去的呢?接下来咋们就一起来跟踪探讨一番,本章节主要内容:

1.springboot自动装配原理

2.nacos客户端注册流程

二、Springboot自动装配

先从MicroserviceAStarter启动类入口跟进:

1.@SpringBootApplication注解

@SpringBootApplication

@EnableDiscoveryClient

public class MicroserviceAStarter {

public static void main(String[] args) throws Exception {

SpringApplication.run(MicroserviceAStarter.class, args);

}

}

2.SpringBootApplication 又引入了@EnableAutoConfiguration注解

3.EnableAutoConfiguration注解导入了AutoConfigurationImportSelector选择器

4.AutoConfigurationImportSelector实现了DeferredImportSelector接口,再spring ioc容器初始化过程中将会对DeferredImportSelector这类接口自动调用selectImports方法:

5.getCandidateConfigurations方法读取类路径下META-INF/spring.factories中的配置信息

6.nacos注册中心自动装配:

三、客户端注册流程

1.找到nacosAutoServiceRegistration的bean初始化构造

2.跟踪父类构造:

3.发现父类AbstractAutoServiceRegistration实现了ApplicationListener接口

了解spring bean的生命周期的同学应该了解,spring ioc容器初始化过程会自动调用listener:

感兴趣可以跟踪一下类AbstractApplicationContext.refresh.finishRefresh方法:

那么也就是说nacos启动过程中会调用AbstractAutoServiceRegistration类中的onApplicationEvent方法了。接着跟踪下去重点看start方法:

调用register方法:

NacosAutoServiceRegistration.register() --->NacosServiceRegistry.register

namingService是最终完成向nacos服务端进行注册的。咋们再继续跟进看看NamingProxy.registerService方法(将本机IP,port作为实例参数进行传递):

reqApI中的url地址:

最终以http的形式调用服务注册中心接口:

好了,目前分析到这里咋们nacos客户端注册流程就大概过了一遍。

你可能感兴趣的:(Nacos客户端自动注册工作原理剖析(三))