Nacos 全方位学习笔记

news/2025/12/5 22:50:29/文章来源:https://www.cnblogs.com/2678066103hs/p/19313868

核心定位:Nacos 是阿里巴巴开源的,致力于构建云原生应用的动态服务发现配置管理服务管理平台。

公式理解Nacos = Spring Cloud Eureka (服务注册) + Spring Cloud Config (配置中心) + Spring Cloud Bus (消息总线)


1. 下载与安装

1.1 下载与启动

  • 下载地址:https://github.com/alibaba/nacos/releases

  • 解压:解压至非中文、无空格的目录。

  • 启动(进入/bin目录):

    • Windows:

      startup.cmd -m standalone
      

      注意:必须加 -m standalone 指定单机模式,否则单纯运行 startup.cmd 默认会尝试以集群模式启动,导致报错。

    • Linux/Macsh startup.sh -m standalone

  • 访问http://localhost:8848/nacos (默认账号/密码:nacos/nacos)

1.2 关键端口说明 (Nacos 2.x)

Nacos 2.0 引入了 gRPC,会占用额外端口,需确保防火墙开放以下偏移端口:

  • 8848: 主端口 (HTTP)
  • 9848: 客户端 gRPC 请求服务端端口 (8848 + 1000)
  • 9849: 服务端 gRPC 通信端口 (8848 + 1001)

2. 核心功能一:服务注册与发现 (Service Registry)

Nacos 解决了微服务架构中“服务 A 如何自动找到服务 B”的核心问题。

2.1 架构原理

  • Provider (提供者):启动时将 IP、端口、服务名注册到 Nacos。
  • Consumer (消费者):定时拉取服务列表并缓存依然本地,通过负载均衡算法选择实例。
  • Nacos Server:维护服务列表,并通过心跳机制(默认 5秒)检查实例健康状态。

2.2 实战步骤

第一步:作为服务提供者 (Provider)

  1. 引入依赖

    <dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    </dependency>
    
  2. 配置 application.yml

    server:port: 8081
    spring:application:name: user-service # 【核心】服务名,即服务发现的 IDcloud:nacos:server-addr: localhost:8848 # Nacos 服务端地址discovery:cluster-name: SH # (可选) 集群名称,如 Shanghai
    
  3. 启动类:添加 @EnableDiscoveryClient 注解。

第二步:作为服务消费者 (Consumer)

配置同上(修改端口和服务名)。在进行远程调用时,通常配合 OpenFeign 使用。

  1. 定义 Feign 客户端

    // value 必须与提供者的 spring.application.name 一致
    @FeignClient(value = "user-service") 
    public interface UserClient {@GetMapping("/user/{id}")User findById(@PathVariable("id") Long id);
    }
    
  2. 原理:Feign 拦截请求 -> 询问 Nacos 获取 user-service 实例列表 -> 负载均衡 -> 发送 HTTP 请求。

2.3 高级特性:Nacos Rule (同集群优先负载均衡)

默认负载均衡是轮询。在跨地域场景(如上海调北京)延迟高,我们希望优先调用本地集群

配置方式(在消费者端)

user-service: # 针对某个微服务配置ribbon:# 指定负载均衡规则为 NacosRuleNFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule

效果:优先调用与自己 cluster-name 相同的实例。若本地无实例,才跨集群调用并打印警告。


3. 核心功能二:配置中心 (Config Center)

Nacos 可以集中管理微服务的配置,实现配置热更新,无需重启服务。

3.1 核心概念:三元组定位

  1. Namespace (命名空间):最外层隔离,用于环境隔离 (Dev, Prod)。默认 public
  2. Group (分组):次级隔离,用于业务隔离 (如 Order_Group)。默认 DEFAULT_GROUP
  3. Data ID (数据ID):配置文件的唯一标识,对应 Spring 应用名。

3.2 实战步骤

第一步:引入依赖

注意:SpringBoot 2.4+ 必须引入 bootstrap 依赖。

<!-- Nacos 配置中心 -->
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<!-- 启动加载器 -->
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>

第二步:创建配置文件 (在 Nacos 控制台)

  • Data ID 格式:

    ${spring.application.name}-${spring.profiles.active}.${file-extension}
    
    • 例如:user-service-dev.yaml
  • GroupDEFAULT_GROUP

  • 配置格式:YAML

  • 内容示例:

    pattern:dateformat: MM-dd HH:mm:ss
    

第三步:项目配置 (bootstrap.yml)

必须使用 bootstrap.yml,因为配置中心加载优先级高于 application.yml

spring:application:name: user-service      # 对应 Data ID 前缀profiles:active: dev             # 对应 Data ID 环境后缀cloud:nacos:server-addr: localhost:8848config:file-extension: yaml # 文件后缀namespace: xxxxx-xxxx-xxxx # (可选) 命名空间 UUID,public 不填group: DEFAULT_GROUP

第四步:代码读取与热更新

  • 方式一:@RefreshScope (推荐读取单个值)

    @RestController
    @RefreshScope // 【核心】配置变更后,自动刷新此 Bean
    public class ConfigController {@Value("${pattern.dateformat}")private String dateformat;
    }
    
  • 方式二:@ConfigurationProperties (推荐配置类)
    自动支持热更新,无需额外注解。

    @Component
    @ConfigurationProperties(prefix = "pattern")
    @Data
    public class PatternProperties {private String dateformat;
    }
    

3.3 高级特性:多环境共享配置

适用于数据库、Redis 等通用配置。

bootstrap.yml 配置:

spring:cloud:nacos:config:# 当前服务独有配置prefix: user-servicefile-extension: yaml# 扩展/共享配置extension-configs:- data-id: common-mysql.yamlgroup: DEFAULT_GROUPrefresh: true # 开启热更新

优先级应用自身配置 > 扩展配置 > 本地 application.yml


4. 服务领域模型与管理

4.1 层级结构

  1. Namespace:环境隔离(开发/生产)。
  2. Group:业务分组。
  3. Service:微服务。
  4. Cluster:机房/集群(用于容灾)。
  5. Instance:具体实例节点(IP:Port)。

4.2 核心考点:临时实例 vs 持久实例

Nacos 支持 AP 和 CP 两种模式的切换。

类型 临时实例 (Ephemeral) 持久实例 (Persistent)
默认 是 (Default)
配置 ephemeral=true ephemeral=false
机制 客户端主动上报心跳 服务端主动探测客户端
宕机处理 一段时间无心跳则剔除 宕机标记为不健康不剔除
CAP模型 AP (高可用) CP (强一致)
场景 Spring Cloud 微服务业务 MySQL、Redis 等核心中间件注册

4.3 权重管理

在 Nacos 控制台可调整实例权重 (0~1)。

  • 权重=0:服务不下线,但不再接受流量(用于平滑发布)。
  • 权重越简:流量越大。

5. 生产环境部署:集群与持久化

单机 Nacos 使用内嵌 Derby 数据库,数据易丢失。生产环境必须使用 MySQL

5.1 切换 MySQL 持久化

  1. 在 MySQL 中执行 Nacos 提供的建表脚本 (conf/nacos-mysql.sql)。

  2. 修改 conf/application.properties

    spring.datasource.platform=mysql
    db.num=1
    db.url.0=jdbc:mysql://127.0.0.1:3306/nacos_config?characterEncoding=utf8&...
    db.user.0=root
    db.password.0=root
    

5.2 集群部署架构

标准的生产架构:Nginx (VIP) -> Nacos 集群 (3节点) -> MySQL (主从)

  1. 配置 cluster.conf:填入 3 个节点的 IP:Port。
  2. Nginx 代理:配置 upstream 指向这 3 个节点。
  3. 微服务配置server-addr 填写 Nginx 的地址,而非单个 Nacos 节点的地址。

6. 总结速查表

模块 关键知识点 核心配置/注解
注册中心 服务自动注册 @EnableDiscoveryClient / server-addr
负载均衡 NacosRule (优先调同集群)
配置中心 配置文件规则 ${name}-${profile}.${ext}
热更新机制 @RefreshScope / @ConfigurationProperties
共享配置 extension-configs
运维管理 隔离级别 Namespace > Group > Service
实例模型 临时实例(AP)、持久实例(CP)

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

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

相关文章

Http 客户端 Feign 学习笔记

从 RestTemplate 到 Feign RestTemplate 存在的问题 在未使用 Feign 之前,使用 RestTemplate 发起远程调用的代码如下: String url = "http://userservice/user/" + order.getUserId(); User user = restT…

Gemini 2.5 Flash / Nano Banana 系统提示词泄露:全文解读+安全隐患分析

本文作者找到了一种方法可以深入 Nano Banana 的内部运作机制,具体手法没法公开,但结果可以分享。 破解图像生成器跟破解文本模型完全是两回事。图像模型的设计目标是输出图片而非文字,对提示词注入的响应模式不同。…

S6 All System OBD Scanner: 28 Resets (IMMO/BMS/TPMS/ABS) + Lifetime Free Scans

Modern Car Diagnostics: Solving the Puzzle of Complex Systems In today’s automotive world, European and American vehicles are equipped with sophisticated electronic systems—from engine control units …

第五十六篇

今天是12月5号,上了形策

Linux中级のSSH远程连接

SSH基本概述 SSH是一个安全协议,在进行数据传输时,会对数据包进行加密处理,加密后再进行数据传输。确保了数据传输安全。SSH服务主要有哪些功能? 1.提供远程连接服务器的服务 2.对传输的数据进行加密除了SSH协议能…

Qt C++ 软件开发工程师面试题 - 教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

C 语言 Day02

C 语言 Day02 回顾 1 运行环境搭建 mingw64 配置环境变量(path) vscode 安装 vscode 扩展: 简体中文、c/c++2 编写第一个程序 3 程序运行流程机制 编写代码 -> 预处理 -> 编译 -> 汇编 …

不再错过任何销售:为你的Python Flask应用集成Stripe支付和Slack通知

本文提供了一个详细、循序渐进的实践指南,讲解如何为你的Flask Web应用程序添加一次性的Stripe支付功能,并通过设置Slack Webhook来实现实时销售通知,确保你不再错过任何一笔交易。不再错过任何销售:为你的Python …

LLL格基约简算法(2)

LLL 算法教程:从理论到实践LLL 算法教程:从理论到实践 Date: December 4, 2025目录 第一部分:理论基础LLL 算法概述格的数学基础Gram-Schmidt 正交化LLL 算法的理论框架第二部分:算法实现LLL 算法详细步骤算法正确…

Accurate Camera Calibration using Iterative Refinement of Control Points

基于控制点迭代优化的精确相机标定基于控制点迭代优化的精确相机标定 安库尔达塔(Ankur Datta)、金俊植(Jun-Sik Kim)、武居功(Takeo Kanade) 卡内基梅隆大学机器人研究所 {ankurd,kimjs,tk}@cs.cmu.edu 摘要 本…

探寻并预防机器学习模型中的安全漏洞

文章探讨了机器学习模型在面临对抗性攻击时的脆弱性,如微小的输入扰动即可导致图像识别系统失效。研究同时提出了多种防御策略,包括通过差分隐私保护图结构数据、使用“教师判别器”生成可扩展的私密数据,以及开发能…

国家智库发文回应AI就业焦虑:替代之外,人机协作、灵活就业是趋势

今年8月,国务院发布《关于深入实施“人工智能+”行动的意见》,勾勒出AI技术与产业深度融合的未来蓝图;近日,学习时报刊发的《积极应对人工智能对就业的影响》一文,这份“国家级就业指南”回应了当前大众对于AI抢饭…

实用指南:MySQL 基础完全指南(视频教程)

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

12/5

今天没课

实用指南:中国机器人产业:迅猛崛起与未来征程

实用指南:中国机器人产业:迅猛崛起与未来征程2025-12-05 22:19 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display:…

解决国内Github.com打不开的方法

解决国内Github.com打不开的方法解决国内Github.com打不开的方法一、Github是什么github对普通人来说更像是一个巨大的资源库,有丰富的软件资源、各类插件、设计资源等。二、如何访问Github1. 访问错误的原因我们会发…

Harmony鸿蒙编写0基础入门到精通Day11--TypeScript篇

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

2025年下半年上海ISO三体系认证机构全方位评测与选择指南

摘要 随着2025年企业国际化进程加速,ISO三体系认证(ISO9001、ISO14001、ISO45001)成为上海地区企业提升管理水平和市场竞争力的关键。行业数据显示,2024年上海ISO认证市场规模同比增长15%,预计2025年下半年需求将…

鲜花

习惯了 空欢喜 学会了 不哭泣 每颗珍珠都曾是痛过的沙粒 我在等你 找到你 一直到太阳升起 多少次坠下谷底也能抱住自己 山上的风 地心的力 生命向上长成了自己 那时你会看到春野漫地 从失眠 到失意 从失落 到失去 多少…