nacos 服务注册原理

news/2024/9/12 15:13:37/文章来源:https://www.cnblogs.com/cryus/p/18301303

springboot 的各种 starter 会根据 SPI 机制,读取 META-INFO/spring.factories 文件,自动注册一些 bean,spring-cloud-starter-alibaba-nacos-discovery 的 spring.factories 如下:

org.springframework.cloud.bootstrap.BootstrapConfiguration=\com.alibaba.cloud.nacos.discovery.configclient.NacosDiscoveryClientConfigServiceBootstrapConfiguration
org.springframework.boot.SpringApplicationRunListener=\com.alibaba.cloud.nacos.logging.NacosLoggingAppRunListener

发现并没有自动配置的自动装配的类?wtf?

从 spring boot2.7开始,慢慢不支持 META-INF/spring.factories 文件了,需要导入的自动配置类可以放在
/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports,我这是 springcloud2023 版本,对应是 spring3.x 所以要看 META-INF/spring 下的文件

com.alibaba.cloud.nacos.discovery.NacosDiscoveryAutoConfiguration
com.alibaba.cloud.nacos.endpoint.NacosDiscoveryEndpointAutoConfiguration
com.alibaba.cloud.nacos.registry.NacosServiceRegistryAutoConfiguration
com.alibaba.cloud.nacos.discovery.NacosDiscoveryClientConfiguration
com.alibaba.cloud.nacos.discovery.NacosDiscoveryHeartBeatConfiguration
com.alibaba.cloud.nacos.discovery.reactive.NacosReactiveDiscoveryClientConfiguration
com.alibaba.cloud.nacos.discovery.configclient.NacosConfigServerAutoConfiguration
com.alibaba.cloud.nacos.loadbalancer.LoadBalancerNacosAutoConfiguration
com.alibaba.cloud.nacos.NacosServiceAutoConfiguration
com.alibaba.cloud.nacos.util.UtilIPv6AutoConfiguration

NacosServiceRegistryAutoConfiguration 主要看这个,这个类上面有一些注解,装配了 3 个 bean,这是 spring 的知识,可以翻翻前面的文章,这里就不赘述了,只要看 NacosAutoServiceRegistration 这个 bean(名字中带有 auto,意义也是一样的,完成自动注册)

@Configuration(proxyBeanMethods = false)
@EnableConfigurationProperties
@ConditionalOnNacosDiscoveryEnabled
@ConditionalOnProperty(value = "spring.cloud.service-registry.auto-registration.enabled",matchIfMissing = true)
@AutoConfigureAfter({ AutoServiceRegistrationConfiguration.class,AutoServiceRegistrationAutoConfiguration.class,NacosDiscoveryAutoConfiguration.class })
public class NacosServiceRegistryAutoConfiguration {@Beanpublic NacosServiceRegistry nacosServiceRegistry(NacosServiceManager nacosServiceManager,NacosDiscoveryProperties nacosDiscoveryProperties) {return new NacosServiceRegistry(nacosServiceManager, nacosDiscoveryProperties);}@Bean@ConditionalOnBean(AutoServiceRegistrationProperties.class)public NacosRegistration nacosRegistration(ObjectProvider<List<NacosRegistrationCustomizer>> registrationCustomizers,NacosDiscoveryProperties nacosDiscoveryProperties,ApplicationContext context) {return new NacosRegistration(registrationCustomizers.getIfAvailable(),nacosDiscoveryProperties, context);}// 自动注册到 nacos 的核心方法@Bean@ConditionalOnBean(AutoServiceRegistrationProperties.class)public NacosAutoServiceRegistration nacosAutoServiceRegistration(NacosServiceRegistry registry,AutoServiceRegistrationProperties autoServiceRegistrationProperties,NacosRegistration registration) {return new NacosAutoServiceRegistration(registry,autoServiceRegistrationProperties, registration);}}

这里只能知道注册了 3 个 bean,bean 的功能是啥现在也不知道,点进去看一下会发现:NacosAutoServiceRegistration 实现了一个接口 ApplicationListener<WebServerInitializedEvent>。事件监听也回去看看之前的文章,作用是 spring 容器启动会回调 AbstractAutoServiceRegistration#onApplicationEvent() 这个方法,这个方法源码调用链如下

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/743478.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

光纤存储中raid5出现故障数据恢复

一、故障检测与评估 检查RAID状态: 使用RAID管理或存储管理工具检查RAID 5阵列的状态,确认故障的具体表现和受影响的硬盘。 评估数据损失: 确定哪些数据受到影响,评估数据恢复的重要性和紧急性。二、数据保护 立即停止写入操作: 一旦发现RAID 5故障,应立即停止对存储卷的…

如何避免raid掉阵

一、硬件选择与配置 选用高质量硬件: 确保RAID阵列中的硬盘、控制器等硬件组件有良好的质量和稳定性。 使用经过兼容性测试的硬件组合,以减少因硬件不兼容导致的RAID掉阵风险。 合理配置RAID级别: 根据数据的重要性、性能需求和预算选择合适的RAID级别。例如,对于关键数据,…

U盘格式化数据恢复

一、立即停止使用U盘 一旦发现U盘被格式化,立即停止使用它,避免新的数据写入覆盖原有的数据,增加恢复难度。 二、使用数据恢复三、利用Windows自带功能 如果Windows操作系统中开启了文件历史记录、备份和还原等功能,也可以尝试使用这些内置工具来恢复数据: 文件历史记录:…

什么是VMFS存储卷

VMFS(Virtual Machine File System)存储卷是VMware虚拟化环境中用于存储虚拟机文件的一种高性能集群文件系统。 一、定义与特性 定义:VMFS是专为虚拟机环境设计的一种文件系统,它允许多个虚拟机共享同一物理存储资源,并提供了数据冗余和容错机制。VMFS存储卷即为在VMFS文件…

固态硬盘无法读取怎么办

一、检查硬件连接 关闭计算机并断开电源:确保在操作过程中计算机处于关闭状态,并断开电源插头,以避免电流对硬件造成损害。 检查接口连接: 确认固态硬盘的SATA接口或M.2接口(根据硬盘类型)与主板的连接是否牢固。 检查SATA数据线或M.2插槽是否有损坏或脏污,如果有,尝试…

VMware vsphere存储管理

VMware vSphere存储管理是一个复杂而关键的过程,它涉及到虚拟化环境中存储资源的配置、优化、监控和保护。 一、存储基础数据存储类型 VMware vSphere支持多种数据存储类型,包括使用SCSI、SAS或SATA驱动器的本地存储,基于网络的存储如iSCSI和NFS,以及更昂贵的光纤通道(FC)数…

光纤存储重组raid磁盘阵列和raid数据恢复

一、光纤存储重组RAID磁盘阵列 1.确定故障类型: 首先,需要确定RAID阵列的故障类型,如硬盘离线、性能下降等。这通常通过查看RAID控制器的状态信息。 备份现有数据:如果可能,应在重组之前对现有数据进行备份,以防在重组过程中数据丢失。 2. 重组步骤 移除硬盘:按照RAID阵…

前端学习-flutter学习-010-按钮

《Flutter实战第二版》ElevatedButton(child: Text("ElevatedButton 默认带有阴影和灰色背景。按下后,阴影会变大"),onPressed: () {},),TextButton(child: Text("TextButton 默认背景透明并不带阴影。按下后,会有背景色"),onPressed: () {},),OutlinedB…

Codeforces 956 Div2

期末考试结束,开始训练 A. Array Divisibility----------------------------------题解---------------------------- 简单的构造题,要让数组a里面的下表为1<=k<=n的数以及下表为(k的因数)的数加起来的和能被K整除,那我们只需要让每一个k的因数都能被k整除就行了,直接…