唯's Blog

笔者是一个热爱编程的 Java 程序员。

0%

Nacos_SPI机制

  • Nacos 源码中使用了大量的 SPI 来实现自定义扩展

  • 定义了 NacosServiceLoader 用来加载 SPI 服务,底层使用的还是 JDK ServeicLoader。其核心定义了一个 Map 缓存 ServiceLoader 加载的 Class ,避免二次加载,提高效率

NacosApplicationListener

提供在 Nacos application 启动 ,环境准备,上下文准备,容器刷新时监听方法

自定义 SpringApplicationRunListener 实现接口 Spring 原生的 应用监听器接口 SpringApplicationRunListener。字段 nacosApplicationListeners 利用 SPI 机制加载了扩展的所有 NacosApplicationListener 实例,SpringApplicationRunListener 实现的所有监听方法都是依次调用 nacosApplicationListeners 的方法。

默认两个实现类

StartingApplicationListener

核心功能:注入 Spring 容器环境Bean,加载自定义配置文件(spring.config.additional-location),加载系统参数, 加载环境参数,

包括自定义的环境参数 CustomEnvironmentPluginManager

LoggingApplicationListener

  • 用于初始化日志配置信息,META-INF/logback/nacos.xml

CustomEnvironmentPluginService

CustomEnvironmentPluginManager 字段 SERVICE_LIST SPI 加载自定义环境 CustomEnvironmentPluginService

默认无实现

限流插件- Control-Plugin

继承实现 ConnectionControlManager 完成Nacos应用的限流策略