一、前景概要
回顾上一章节的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客户端注册流程就大概过了一遍。