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

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介: 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


相关文章
|
1天前
|
XML 人工智能 Java
Spring Bean名称生成规则(含源码解析、自定义Spring Bean名称方式)
Spring Bean名称生成规则(含源码解析、自定义Spring Bean名称方式)
|
2天前
|
Java API Nacos
第十二章 Spring Cloud Alibaba Sentinel
第十二章 Spring Cloud Alibaba Sentinel
12 0
|
2天前
|
Java Nacos 开发者
Java从入门到精通:4.2.1学习新技术与框架——以Spring Boot和Spring Cloud Alibaba为例
Java从入门到精通:4.2.1学习新技术与框架——以Spring Boot和Spring Cloud Alibaba为例
|
8天前
|
Java 关系型数据库 MySQL
一套java+ spring boot与vue+ mysql技术开发的UWB高精度工厂人员定位全套系统源码有应用案例
UWB (ULTRA WIDE BAND, UWB) 技术是一种无线载波通讯技术,它不采用正弦载波,而是利用纳秒级的非正弦波窄脉冲传输数据,因此其所占的频谱范围很宽。一套UWB精确定位系统,最高定位精度可达10cm,具有高精度,高动态,高容量,低功耗的应用。
一套java+ spring boot与vue+ mysql技术开发的UWB高精度工厂人员定位全套系统源码有应用案例
|
10天前
|
Java API 对象存储
对象存储OSS产品常见问题之使用Spring Cloud Alibaba情况下文档添加水印如何解决
对象存储OSS是基于互联网的数据存储服务模式,让用户可以安全、可靠地存储大量非结构化数据,如图片、音频、视频、文档等任意类型文件,并通过简单的基于HTTP/HTTPS协议的RESTful API接口进行访问和管理。本帖梳理了用户在实际使用中可能遇到的各种常见问题,涵盖了基础操作、性能优化、安全设置、费用管理、数据备份与恢复、跨区域同步、API接口调用等多个方面。
26 2
|
18天前
|
Dubbo Java 应用服务中间件
深度剖析:Dubbo使用Nacos注册中心的坑
2020年笔者在做微服务部件升级时,Dubbo的注册中心从Zookeeper切换到Nacos碰到个问题,最近刷Github又有网友提到类似的问题,就在这篇文章里做个梳理和总结。
深度剖析:Dubbo使用Nacos注册中心的坑
|
18天前
|
SpringCloudAlibaba 监控 Java
SpringCloud Alibaba微服务-- Sentinel的使用(保姆级)
SpringCloud Alibaba微服务-- Sentinel的使用(保姆级)
|
1月前
|
Dubbo 关系型数据库 MySQL
nacos常见问题之命名空间配置数据上线修改如何解决
Nacos是阿里云开源的服务发现和配置管理平台,用于构建动态微服务应用架构;本汇总针对Nacos在实际应用中用户常遇到的问题进行了归纳和解答,旨在帮助开发者和运维人员高效解决使用Nacos时的各类疑难杂症。
93 1
|
1月前
|
存储 运维 监控
NACOS 配置中心和注册中心是分两个集群部署还是放在一个集群中
【2月更文挑战第33天】NACOS 配置中心和注册中心是分两个集群部署还是放在一个集群中
78 2
|
1月前
|
运维 Java Nacos
nacos常见问题之配置账号密码
Nacos是阿里云开源的服务发现和配置管理平台,用于构建动态微服务应用架构;本汇总针对Nacos在实际应用中用户常遇到的问题进行了归纳和解答,旨在帮助开发者和运维人员高效解决使用Nacos时的各类疑难杂症。
249 6

推荐镜像

更多