尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

Nacos 全方位学习笔记

Nacos 全方位学习笔记
📅 发布时间:2026/6/19 11:59:32

核心定位: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/Mac:sh 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
  • Group:DEFAULT_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 客户端 Feign 学习笔记
  • 实用指南:中国机器人产业:迅猛崛起与未来征程
  • 黑马C++ 通讯录管理系统

最新新闻

  • go:Producer Consumer Pattern
  • 高温冶炼车间炉前工位工业平板采购方案,避开高温死机故障
  • AWS 删除用户的权限会发生什么
  • 普宁哪家家具又好又便宜|质量过硬价格透明哪家店 - 品牌观察
  • MC68060 JTAG边界扫描技术详解:从原理到硬件调试实战
  • 批量合成视频工具 批量剪辑视频神器免费版 一键生成 青柠剪吧助手全能版

日新闻

  • 5分钟掌握Python进化算法:Geatpy高性能优化工具完全指南
  • Microchip 24AA044 EEPROM选型与应用全指南:从参数解析到实战编程
  • 华为的鸿蒙到底有多牛?为什么称作遥遥领先?

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号