Spring Cloud Alibaba源码 - 16 Nacos 注册中心源码解析

本文涉及的产品
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
RDS AI 助手,专业版
简介: Spring Cloud Alibaba源码 - 16 Nacos 注册中心源码解析

6735aa4777de402592fbe82e8b40ee3d.png

Nacos & Ribbon & Feign 核心微服务架构图


e2ea443e4d1a4b57aa07c17457939376.png


核心原理如下


微服务系启动时将自己的相关的元数据信息注册到注册中心,同时暴漏对外调用的HTTP接口


服务消费者基于Feign调用服务提供者对外发布的接口,先对调用的本地接口加上@FeignClient注解,Feign会针对加了该注解的接口生成动态代理,服务消费者会针对Feign生成的动态代码方法调用方法时,会在底层生成Http协议格式的请求,类似/stock/deduct?productId=999


Feign最终会调用Ribbon从本地的Nacos注册表的缓存里根据服务名取出服务提供者所在的机器列表,然后进行负载均衡并选择一台几区出来,对选出来的机器IP和端口拼接之前的url ,生成类似调用http接口地址http:/192.168.1222.22:7000/stock/deduct?productId=999,最后基于HttpClient调用请求。


Nacos核心功能


930ecf207e5444a7b002d53b337fd809.png


服务注册


Nacos Client会通过发送REST请求的方式向Nacos Server注册自己的服务,提供自身的元数据,比如ip地址、端口等信息。Nacos Server接收到注册请求后,就会把这些元数据信息存储在一个双层的内存Map中。


服务心跳


在服务注册后,Nacos Client会维护一个定时心跳来持续通知Nacos Server,说明服务一直处于可用状态,防止被剔除。默认5s发送一次心跳。


服务健康检查


Nacos Server会开启一个定时任务用来检查注册服务实例的健康情况,对于超过15s没有收到客户端心跳的实例会将它的healthy属性置为false(客户端服务发现时不会发现),如果某个实例超过30秒没有收到心跳,直接剔除该实例(被剔除的实例如果恢复发送心跳则会重新注册)


服务发现


服务消费者(Nacos Client)在调用服务提供者的服务时,会发送一个REST请求给Nacos Server,获取上面注册的服务清单,并且缓存在Nacos Client本地,同时会在Nacos Client本地开启一个定时任务定时拉取服务端最新的注册表信息更新到本地缓存


服务同步


Nacos Server集群之间会互相同步服务实例,用来保证服务信息的一致性。


源码下载 & 启动


b966ea60da5642f1b47c55ca4e47cab6.png

395a5b40ddc147bca35ea00f23705395.png


https://nacos.io/zh-cn/docs/system-configurations.html


f8922cd3d7344d03be2fa554ddfdba9f.png

  • nacos源码导入要求maven 3.2.5以上版本


【standalone模式】


运行console模块里的 com.alibaba.nacos.Nacos.java


Nacos.java 启动需要增加启动vm参数,注意nacos.home目录要改成你自己源码对应的distribution模块目录 -Dnacos.standalone=true -Dnacos.home=D:\IdeaProjects\nacos-1.1.4\distribution


9e0bee57e2a044848cccff920af534e6.png


启动后访问 http://localhost:8848/nacos/index.html



5d1d536b864b4d889e157b55e5581574.png


【cluster模式】


nacos 集群模式需要 需要配置mysql 。

  1. 先创建一个数据,名字随意
  2. 执行 distribution/conf 目录下的 nacos-mysql.sql 脚本
  1. 修改 console\src\main\resources 目录下的 application.properties 文件里的mysql配置
### If use MySQL as datasource:
spring.datasource.platform=mysql
### Count of DB:
db.num=1
### Connect URL of DB:
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user.0=root
db.password.0=artisan


运行console模块里的 com.alibaba.nacos.Nacos.java , 需要增加启动vm参数端口号和实例运行路径nacos.home(对应的目录需要自己提前创建好),每台server的nacos.home目录里需要创建一个conf文件夹,里面放一个cluster.conf文件,文件里需要把所有集群机器ip和端口写入进去

127.0.0.1:6000
127.0.0.1:6001
127.0.0.1:6002


ac97ff57b3244d97ad0fec436328a7bc.png


Nacos服务注册表结构


 //  Map<namespace, Map<group::serviceName, Service>>     
 private Map<String, Map<String, Service>> serviceMap = new ConcurrentHashMap<>();



19935473f7af4c48a0b2f0f8fd3864b3.png

b77018c8e97544b4b9b8e0c70fc07535.png

源码流程图


7509b97647df456b8f4507087f4c00c2.png


呶 ,图都给你画好了,https://www.processon.com/view/link/6201bbaf1e08530f015e6cc5


相关文章
|
4月前
|
人工智能 Java Nacos
基于 Spring AI Alibaba + Nacos 的分布式 Multi-Agent 构建指南
本文将针对 Spring AI Alibaba + Nacos 的分布式多智能体构建方案展开介绍,同时结合 Demo 说明快速开发方法与实际效果。
3483 72
|
5月前
|
负载均衡 监控 Java
Spring Cloud Gateway 全解析:路由配置、断言规则与过滤器实战指南
本文详细介绍了 Spring Cloud Gateway 的核心功能与实践配置。首先讲解了网关模块的创建流程,包括依赖引入(gateway、nacos 服务发现、负载均衡)、端口与服务发现配置,以及路由规则的设置(需注意路径前缀重复与优先级 order)。接着深入解析路由断言,涵盖 After、Before、Path 等 12 种内置断言的参数、作用及配置示例,并说明了自定义断言的实现方法。随后重点阐述过滤器机制,区分路由过滤器(如 AddRequestHeader、RewritePath、RequestRateLimiter 等)与全局过滤器的作用范围与配置方式,提
Spring Cloud Gateway 全解析:路由配置、断言规则与过滤器实战指南
|
5月前
|
XML Java Nacos
Spring Boot 整合Nacos 版本兼容适配 史上最详细文档
本文介绍SpringBoot整合Nacos的完整流程,涵盖Nacos下载安装、配置中心与服务发现集成、版本兼容性问题及实战配置。重点解决SpringBoot 3.3.0与Nacos版本适配难题,推荐使用Spring Cloud Alibaba方案,并提供项目开源地址供参考学习。
|
5月前
|
缓存 安全 Java
Spring Security通用权限管理模型解析
Spring Security作为Spring生态的核心安全框架,结合RBAC与ACL权限模型,基于IoC与AOP构建灵活、可扩展的企业级权限控制体系,涵盖认证、授权流程及数据库设计、性能优化等实现策略。
397 0
|
5月前
|
缓存 安全 Java
Spring Security权限管理解析
Spring Security是Spring生态中的核心安全框架,采用认证与授权分离架构,提供高度可定制的权限管理方案。其基于过滤器链实现认证流程,通过SecurityContextHolder管理用户状态,并结合RBAC模型与动态权限决策,支持细粒度访问控制。通过扩展点如自定义投票器、注解式校验与前端标签,可灵活适配多租户、API网关等复杂场景。结合缓存优化与无状态设计,适用于高并发与前后端分离架构。
426 0
|
5月前
|
人工智能 Java 开发者
【Spring】原理解析:Spring Boot 自动配置
Spring Boot通过“约定优于配置”的设计理念,自动检测项目依赖并根据这些依赖自动装配相应的Bean,从而解放开发者从繁琐的配置工作中解脱出来,专注于业务逻辑实现。
1881 0
|
5月前
|
SQL Java 数据库连接
Spring Data JPA 技术深度解析与应用指南
本文档全面介绍 Spring Data JPA 的核心概念、技术原理和实际应用。作为 Spring 生态系统中数据访问层的关键组件,Spring Data JPA 极大简化了 Java 持久层开发。本文将深入探讨其架构设计、核心接口、查询派生机制、事务管理以及与 Spring 框架的集成方式,并通过实际示例展示如何高效地使用这一技术。本文档约1500字,适合有一定 Spring 和 JPA 基础的开发者阅读。
567 0
|
4月前
|
人工智能 Java API
Nacos 3.1.0 正式发布,支持 A2A 注册中心与 MCP 注册协议增强
3.1.0 发布核心全新功能-Agent 注册中心,助力构建基于 A2A 协议的多 Agent 协作的AI应用,同时 MCP 注册中心适配最新 MCP 官方注册中心协议及升级优化多项核心功能。
1130 39
|
4月前
|
XML Java 数据格式
《深入理解Spring》:AOP面向切面编程深度解析
Spring AOP通过代理模式实现面向切面编程,将日志、事务等横切关注点与业务逻辑分离。支持注解、XML和编程式配置,提供五种通知类型及丰富切点表达式,助力构建高内聚、低耦合的可维护系统。

热门文章

最新文章

推荐镜像

更多
  • DNS