Nacos 是阿里巴巴开源的一款“一站式”解决方案,旨在简化微服务架构中的核心难题。它的核心定位非常明确:服务注册中心 + 动态配置中心

对于初学者来说,可以把它想象成微服务世界的“总机”和“公告板”:

  • 总机(服务注册中心):所有服务启动后都来这里登记自己的地址(IP和端口)。当A服务需要调用B服务时,直接问Nacos要B的地址即可,无需硬编码。
  • 公告板(动态配置中心):所有服务的配置文件都集中存放在这里。修改配置后,Nacos会实时通知所有相关服务,实现“配置热更新”,无需重启应用。

下面,我们将从零开始,带你完成 Nacos 的入门与实战。

🚀 第一步:5分钟快速启动 Nacos

Nacos 的启动非常简单,适合本地快速体验。

  1. 下载与解压
    从 Nacos 的 GitHub Releases 页面下载最新稳定版(如 2.3.0)的压缩包(zip 或 tar.gz)。

  2. 单机模式启动
    解压后,进入 nacos/bin 目录,根据你的操作系统执行启动命令。-m standalone 参数表示以单机模式启动,适合开发和测试环境。

    • Windows: startup.cmd -m standalone
    • Linux/Mac: sh startup.sh -m standalone
  3. 访问控制台
    启动成功后,在浏览器中访问 http://localhost:8848/nacos

    • 默认账号/密码: nacos / nacos

🛠️ 第二步:实战应用一 —— 动态配置中心

这是 Nacos 最常用、最能体现价值的功能。我们将创建一个 Spring Boot 应用,并从 Nacos 动态获取配置。

  1. 引入依赖
    在你的 Spring Boot 项目的 pom.xml 中添加 Nacos Config 的依赖。

    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        <version>2022.0.0.0</version> <!-- 请根据你的Spring Boot版本选择适配的版本 -->
    </dependency>
    <!-- Spring Boot 2.4+ 版本需要额外添加此依赖,否则bootstrap.yml不生效 -->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-bootstrap</artifactId>
    </dependency>
    
  2. 配置 bootstrap.yml
    src/main/resources 目录下创建 bootstrap.yml 文件。它的加载优先级高于 application.yml,确保应用启动时能先从 Nacos 拉取配置。

    spring:
      application:
        name: nacos-config-demo # 服务名,将作为Nacos中Data ID的一部分
      cloud:
        nacos:
          config:
            server-addr: 127.0.0.1:8848 # Nacos服务地址
            file-extension: yaml # 配置文件的格式
    
  3. 在 Nacos 控制台创建配置

    • 登录 Nacos 控制台,进入“配置管理” -> “配置列表”。
    • 点击“+”号新建配置。
    • Data ID: nacos-config-demo.yaml (格式为:${spring.application.name}.${file-extension})
    • Group: DEFAULT_GROUP (保持默认即可)
    • 配置格式: YAML
    • 配置内容:
      user:
        name: Nacos-User
        age: 26
      
    • 点击“发布”。
  4. 在代码中读取并动态刷新
    创建一个 Controller,使用 @Value 注解读取配置,并通过 @RefreshScope 注解开启动态刷新功能。

    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.cloud.context.config.annotation.RefreshScope;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    @RestController
    @RefreshScope // 关键注解:开启配置动态刷新
    public class ConfigController {
    
        @Value("${user.name}")
        private String name;
    
        @Value("${user.age}")
        private Integer age;
    
        @GetMapping("/user")
        public String getUser() {
            return "Name: " + name + ", Age: " + age;
        }
    }
    
  5. 验证

    • 启动你的 Spring Boot 应用。
    • 访问 http://localhost:8080/user,你会看到返回 Name: Nacos-User, Age: 26
    • 回到 Nacos 控制台,修改配置内容(例如将 age 改为 30),再次点击“发布”。
    • 无需重启应用,直接刷新浏览器,你会发现返回的内容已经实时更新为 Name: Nacos-User, Age: 30

🔗 第三步:实战应用二 —— 服务注册与发现

接下来,我们让服务自动注册到 Nacos,并实现服务间的调用。

  1. 引入依赖
    pom.xml 中添加 Nacos Discovery 的依赖。

    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        <version>2022.0.0.0</version>
    </dependency>
    
  2. 配置 application.yml
    application.yml 中指定 Nacos 服务器地址。

    spring:
      application:
        name: user-service # 服务名称
      cloud:
        nacos:
          discovery:
            server-addr: 127.0.0.1:8848
    
  3. 开启服务发现
    在你的 Spring Boot 启动类上添加 @EnableDiscoveryClient 注解。

    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
    
    @SpringBootApplication
    @EnableDiscoveryClient // 开启服务发现
    public class UserServiceApplication {
        public static void main(String[] args) {
            SpringApplication.run(UserServiceApplication.class, args);
        }
    }
    
  4. 验证注册
    启动应用后,回到 Nacos 控制台的“服务管理” -> “服务列表”,你就能看到 user-service 已经成功注册,并且状态为“健康”。

  5. 服务间调用
    假设还有一个 order-service 需要调用 user-service。我们可以使用 OpenFeign 来简化调用。

    • order-service 中引入 spring-cloud-starter-openfeign 依赖。
    • 在启动类上添加 @EnableFeignClients 注解。
    • 创建一个 Feign 客户端接口:
      import org.springframework.cloud.openfeign.FeignClient;
      import org.springframework.web.bind.annotation.GetMapping;
      
      @FeignClient(name = "user-service") // 直接写服务名
      public interface UserFeignClient {
          @GetMapping("/user/info") // 对应user-service的接口路径
          String getUserInfo();
      }
      
    • order-service 的 Controller 中直接注入并使用 UserFeignClient 即可,Nacos 会自动完成服务名的解析和负载均衡。

📊 核心概念与生产建议

  • 命名空间 (Namespace):用于隔离不同的环境,如开发(dev)、测试(test)、生产(prod)。
  • 分组 (Group):用于对配置或服务进行分组,默认为 DEFAULT_GROUP
  • Data ID:配置的唯一标识,通常由服务名和文件扩展名组成。

生产环境建议

  • 集群部署:生产环境必须部署 Nacos 集群(至少3个节点)以保证高可用性。
  • 数据持久化:必须配置外置的 MySQL 数据库来持久化配置和服务信息,替换默认的嵌入式数据库。
  • AP/CP 模式:Nacos 默认使用 AP 模式(高可用),适用于服务发现。对于配置中心,它内部使用 CP 模式(强一致性)来保证配置的准确性。
Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐