springcloud-nacos组件浅析-3

本文深入解析Nacos服务端注册原理,通过ServiceManager管理服务注册流程,利用Service、Cluster和Instance模型,实现服务的存储与高可用。文章详细介绍了ConsistencyService如何使用Distro协议进行实例添加,以及RecordListener在服务注册过程中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

背景

  之前2篇学习过nacos客户端注册相关组件的注册,这里要继续学习下nacos服务端注册原理。

组件分析

  

  如上所示分别为Service、Cluster、Instance三个服务模型结构,可有如下关系。

  接下来看看ServiceManager。

  ServiceManager执行注册时,首先创建服务放到Map中,然后初始化service,service初始化做延时客户端心跳检查任务,其次添加Instance,将添加实例委托给ConsistencyService.

  接下来看看ConsistencyService添加实例的过程,nacos默认AP模式,按Distro协议实现实例添加。

  1、DistroConsistencyServiceImpl初始化时会执行定时任务Notifier,Notifier循环执行从其阻塞队列中拿Pair,触发Record Listener去注册Instances(即格局key去DataStore中获取Instances注册);2、DistroConsistencyServiceImpl由ServiceManager触发添加Instance时会向DataSore中添加Instances并向Notifier中的阻塞队列中添加通知(服务注册)任务。这里还涉及集群同步(taskDispatcher.addTask(key))。接下来就是RecordListener的触发过程。

  回头看看Service,发现Service即是RecoredListener,其最终执行实例注册,即分3步走,1、将ClusterMap复制到新的ClusterMap中,2、遍历Instances将instances添加到新的clusterMap中,3、合并新的clusterMap到Service的clusterMap中。当然这里还涉及cluster的初始化,即健康检查过程(HealthCheckTask)。到这里基本上注册就完成了。

总结

  可以看到服务注册是个相对复杂的过程,但是看到ServiceManager的Map<String, Map<String, Service>> serviceMap = new ConcurrentHashMap<>()和服务的模型结构,即Service、Cluster、Instance也能大概猜到服务的存储,无非就是Service的构建,然后放到Map中,那剩下具体的就是要提高写入性能和高可用,即批次异步添加和copyOnWrite。接下来会继续学习下gateway。

 

要查找特定版本的 `spring-cloud-starter-alibaba-nacos-config` 信息,可以从以下几个方面进行考虑: 1. **版本与 Spring Boot 和 Spring Cloud 的兼容性**: - 根据引用[4]和[5]中的内容,`spring-cloud-starter-alibaba-nacos-config` 的版本需要与 `Spring Boot` 和 `Spring Cloud` 的版本保持兼容。例如,在引用[4]中使用的是 `Spring Boot 3.0.2` 和 `Spring Cloud 2022.0.0`,而对应的 `spring-cloud-alibaba` 版本也是 `2022.0.0`。 - 在引用[5]中,`spring-cloud-starter-alibaba-nacos-config` 的版本为 `2023.0.3.2`,而对应的 `Spring Cloud` 版本是 `3.1.1`。 2. **Maven 依赖配置**: - 要使用特定版本的 `spring-cloud-starter-alibaba-nacos-config`,可以在 Maven 的 `pom.xml` 文件中通过 `<dependency>` 标签指定版本号。例如,引用[5] 中展示了如何配置版本为 `2023.0.3.2` 的依赖: ```xml <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> <version>2023.0.3.2</version> </dependency> ``` - 同时,还需要引入 `spring-cloud-starter-bootstrap` 以确保配置能够正确加载: ```xml <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-bootstrap</artifactId> <version>3.1.1</version> </dependency> ``` 3. **官方文档和社区资源**: - 可以参考 Nacos 官方文档和 Spring Cloud Alibaba 的 GitHub 页面获取更多关于不同版本的详细信息。这些资源通常会提供每个版本的新特性、修复的问题以及与其他框架的兼容性说明。 4. **Nacos Server 地址配置**: - 在使用 `spring-cloud-starter-alibaba-nacos-config` 时,需要在 `bootstrap.properties` 或 `bootstrap.yml` 文件中配置 Nacos Server 的地址。例如,引用[3] 中提到了如何配置 Nacos Server 地址: ```properties spring.application.name=nacos-config spring.cloud.nacos.config.server-addr=127.0.0.1:8849 ``` 5. **动态配置管理功能**: - `spring-cloud-starter-alibaba-nacos-config` 提供了动态配置管理能力,允许在运行时更新配置而无需重启应用[^2]。这对于微服务架构中的配置管理非常有用。 ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

&一步

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值