【Nacos源码篇一】Nacos客户端自动注册源码实现-自动注册事件触发点

做了这么多年程序员,你难道真没想过为什么Springboot项目启动后能直接注册到Nacos吗?为什么Springboot集成Nacos后,应用项目启动就会自动注册到Nacos服务上?他是怎么注册上去的?你思考过吗?,如果你想了解下,那么建议你花费5~10分钟看下【超详细】,绝对让你有所收获...

1、环境说明

  • Springboot版本2.6.13

  • spring-cloud-alibaba-dependencies版本2021.0.5.0

  • spring-cloud-starter-alibaba-nacos-discovery版本2021.0.5.0

2、前置知识点

  • Springboot自动装配基本原理

    Spring Boot 的自动装配机制通过 @EnableAutoConfiguration 注解启用,它会导入 AutoConfigurationImportSelector 类来读取 spring.factories 文件中的配置,选择并导入符合条件的自动配置类,进而注册相应的 Bean 到 Spring 容器中。
  • Spring监听器的基本原理

    1、事件 (ApplicationEvent)
        ApplicationEvent 是所有事件的基类。
        当应用程序上下文中发生某些重要事件时,可以创建一个事件对象,并将其发布到上下文中。
    2、监听器 (ApplicationListener)
        ApplicationListener 是一个接口,它定义了一个方法 onApplicationEvent,当事件被发布时,这个方法会被调用。
        开发者可以通过实现 ApplicationListener 接口来创建自己的监听器,指定需要监听的事件类型。
    3、事件发布者 (ApplicationEventPublisher)
        ApplicationEventPublisher 接口用于发布事件。
        ApplicationContext 实现了 ApplicationEventPublisher 接口,因此可以在上下文中发布事件。
    4、事件广播器 (ApplicationEventMulticaster)
        ApplicationEventMulticaster 是一个抽象类,负责将事件广播给所有的监听器。
        AbstractApplicationContext 在启动时会初始化一个 ApplicationEventMulticaster 实例,并注册所有的监听器。
    5、事件处理流程
        当一个事件被发布时,ApplicationEventMulticaster 将事件发送给所有已注册的监听器。监听器接收到事件后,会执行 onApplicationEvent 方法来进行相应的处理。

    PS:不是本章重点,后面可能会抽时间单独讲解

3、一图说天下

本图完全梳理了Nacos自动注册在Springboot启动过程中客户端发起请求的具体实现流程,如果对后续详解章节没有兴趣,或则自己想主动跟下深入了解其原理,那么完全可以根据此图进行断点跟踪,如果不想看这个这么复杂的图请直接跳过继续看下面讲解,一步一步带你解开它的面纱...

注释:
Spring Boot3.x 中的自动配置使用META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports` ,而不是`META-INF/spring.factories`,这个变动其实在2.7的时候已经改变

4、关键源码详解

4.1、Nacos客户端资源文件分析

Springboot启动的时候会获取META-INF/spring.factories文件,根据文件全限定类名完成服务类的初始化实例化,只有实例化之后才能进行对应的注册逻辑,因此根据先了解以下相关资源类;

在Nacos与Spring Boot集成的过程中,这几个类扮演着重要的角色。另外注意下NacosDiscoveryProperties这个配置类最终对应的是配置文件(application.yml等)中的配置,下面分别介绍它们的作用:

  • NacosServiceRegistry

    作用:
        负责处理服务实例的注册和注销操作。
    职责:
        实现了ServiceRegistry接口,该接口定义了服务注册和注销的基本行为。
        提供了向Nacos服务器注册服务实例的方法。
        提供了从Nacos服务器注销服务实例的方法。
  • NacosRegistration

    作用:
        封装了服务实例的相关信息。
    职责:
        包含了服务实例的元数据,例如服务名称、IP地址、端口等。
        负责构建服务实例的详细信息,这些信息将在注册时传递给Nacos服务器。
        可能还包括一些额外的服务属性,例如健康检查路径等。
  • NacosAutoServiceRegistration【关键类】

    作用:
        自动注册服务实例的核心组件。
    职责:
        实现了AutoServiceRegistration接口,该接口定义了自动注册的行为。
        负责监听Spring Boot应用的生命周期事件,如应用启动完成事件ApplicationReadyEvent。
        在应用启动完成后,自动调用NacosServiceRegistry来注册服务实例。

根据以上知识点,我们下面要分析的第一个问题就是,Springboot在启动的时候是怎样触达上图onApplicationEvent事件的?

4.2、META-INF/spring.factories资源文件加载

初始化构造方法上半部分基本都是默认赋值,不做深入说明,由于前面我们已经猜测是根据监听器原理触发的自动注册流程,因此我们直接看setListeners()方法;

这个方法就是Springboot启动是自动加载资源文件的具体过程;

看到这里我们已经知道Springboot是怎么完成资源自动加载的...

4.3、Nacos客户端自动注册事件触发流程

1、DefaultLifecycleProcessor
作用:
    DefaultLifecycleProcessor是Spring框架中的一个类,用于管理实现了SmartLifecycle接口的Bean的生命周期。
职责:
    负责启动和停止这些Bean。
    支持按优先级顺序启动和停止Bean。
2、doStart()
作用:
    启动实现了SmartLifecycle接口的Bean。
参数:
    lifecycleBeans:一个Map,包含了实现了SmartLifecycle接口的所有Bean。
    groupName:一个字符串,表示当前启动的组的名称。
    autoStartupOnly:一个布尔值,如果为true,则只启动那些isAutoStartup()返回true的Bean。

5、总结

经过上面的分析我们已经知道,Springboot在启动的时候是怎么触发Nacos自动注册事件的,后面的问题就是Nacos客户端和服务端针对自动触发逻辑都做了哪些操作?

欲知后事如何,且听下回分解!恭喜你,又学到了一点知识,又进步了一点点...

添加公众号了解更多,定期分享、绝对实用,绝对对你有帮助!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值