什么是 Nacos?

Nacos(Dynamic Naming and Configuration Service)是阿里巴巴开源的一款动态服务发现、配置管理和服务管理平台,致力于帮助开发者快速构建云原生应用。Nacos是目前国内企业中占比最多的注册中心组件,核心定位 “注册中心 + 配置中心”,适配微服务架构全场景需求,目前已经加入SpringCloudAilibaba中。

简单来说,Nacos 可以解决两个核心问题:

  • 服务发现:让微服务之间能够相互找到对方(类似通讯录)
  • 配置管理:集中管理所有服务的配置,支持动态更新(无需重启服务)

为什么选择 Nacos?

1. 服务注册与发现

  • 一站式解决方案:同时支持服务发现和配置管理,避免集成多个组件的复杂性
  • 高可用:支持集群部署,保证服务稳定性
  • 动态配置:配置修改后实时推送,无需重启应用
  • 易用性:提供友好的控制台界面,操作简单
  • 生态兼容:与 Spring Cloud、Dubbo 等主流微服务框架无缝集成

环境准备

系统要求

  • JDK 8+(推荐 JDK 11)
  • Maven 3.2+(如需源码编译)
  • 内存:至少 2GB(生产环境建议 4GB+)

快速安装 Nacos 服务端

方式 1:直接下载安装包(推荐)

  1. 下载最新稳定版安装包

    # 以 2.3.2 版本为例(请替换为最新版本)
    wget https://github.com/alibaba/nacos/releases/download/2.3.2/nacos-server-2.3.2.tar.gz
  2. 解压安装包

    tar -zxvf nacos-server-2.3.2.tar.gz
    cd nacos/bin
  3. 移动Nacos(单机模式)

    # Linux/Mac
    sh startup.sh -m standalone
    
    # Windows
    cmd startup.cmd -m standalone
  4. 访问控制台

方式 2:Docker 快速部署

# 拉取镜像
docker pull nacos/nacos-server:v2.3.2

# 启动容器(单机模式)
docker run --name nacos -d -p 8848:8848 \
  -e MODE=standalone \
  -e NACOS_AUTH_ENABLE=true \
  nacos/nacos-server:v2.3.2

核心功能实战

1. 配置管理

新建配置

  1. 登录 Nacos 控制台,进入「配置管理」→「配置列表」
  2. 点击「+」新增配置,填写信息:

    • Data ID:通常使用「服务名 - 环境.yml」格式(如 user-service-dev.yml
    • Group:默认 DEFAULT_GROUP 即可(可自定义分组)
    • 配置格式:选择 YAML
    • 配置内容:

      server:
        port: 8081
      user:
        name: 张三
        age: 18
  3. 点击「发布」保存配置

在 Spring Boot 中使用配置

  1. 添加依赖(pom.xml)

    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        <version>2021.0.5.0</version> <!-- 注意与 Spring Cloud 版本匹配 -->
    </dependency>
  2. 创建配置文件 bootstrap.yml(必须是 bootstrap 而非 application)

    spring:
      application:
        name: user-service  # 服务名,与 Data ID 前缀对应
      cloud:
        nacos:
          config:
            server-addr: localhost:8848  # Nacos 服务地址
            file-extension: yml  # 配置文件格式
            group: DEFAULT_GROUP  # 配置分组
      profiles:
        active: dev  # 环境,与 Data ID 中的环境对应
  3. 编写测试代码

    @RestController
    @RefreshScope  // 开启配置自动刷新
    public class UserController {
        
        @Value("${user.name}")
        private String userName;
        
        @Value("${user.age}")
        private Integer userAge;
        
        @GetMapping("/user/info")
        public String getUserInfo() {
            return "姓名:" + userName + ",年龄:" + userAge;
        }
    }
  4. 测试动态配置:在 Nacos 控制台修改配置并发布,无需重启服务,访问接口即可看到更新结果

2. 服务发现

服务注册(Spring Cloud 示例)

  1. 添加依赖(pom.xml)

    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        <version>2021.0.5.0</version>
    </dependency>
  2. 配置服务注册信息(application.yml)

    spring:
      cloud:
        nacos:
          discovery:
            server-addr: localhost:8848  # Nacos 服务地址
  3. 在启动类添加注解

    @SpringBootApplication
    @EnableDiscoveryClient  // 开启服务注册发现功能
    public class UserServiceApplication {
        public static void main(String[] args) {
            SpringApplication.run(UserServiceApplication.class, args);
        }
    }
  4. 启动服务后,在 Nacos 控制台「服务管理」→「服务列表」中可看到注册的服务

服务调用(使用 OpenFeign)

  1. 添加 OpenFeign 依赖

    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-openfeign</artifactId>
    </dependency>
  2. 创建 Feign 客户端接口

    @FeignClient(name = "order-service")  // 目标服务名
    public interface OrderServiceClient {
        
        @GetMapping("/order/{id}")
        String getOrderById(@PathVariable("id") Long id);
    }
  3. 在启动类添加 @EnableFeignClients 注解
  4. 调用服务

    @RestController
    public class UserController {
        
        @Autowired
        private OrderServiceClient orderServiceClient;
        
        @GetMapping("/user/order/{id}")
        public String getUserOrder(@PathVariable Long id) {
            // 调用订单服务
            return orderServiceClient.getOrderById(id);
        }
    }

Nacos 集群部署(生产环境必备)

单机模式仅用于开发测试,生产环境需部署集群以保证高可用。

集群部署步骤概要

  1. 准备 3 台服务器(或虚拟机),确保网络互通
  2. 每台服务器安装 Nacos
  3. 配置 MySQL 数据库(存储集群元数据)
  4. 修改 conf/cluster.conf 文件,添加所有节点地址

    192.168.1.101:8848
    192.168.1.102:8848
    192.168.1.103:8848
  5. 修改 conf/application.properties 配置数据库连接
  6. 分别启动所有节点(无需指定 standalone 参数)
  7. 配置负载均衡器(如 Nginx)转发请求到集群节点

常见问题解决

  1. Nacos 启动失败

    • 检查端口是否被占用(默认 8848)
    • 确保 JDK 版本符合要求
    • 查看 logs 目录下的日志文件排查具体错误
  2. 服务注册不上

    • 检查服务端地址是否正确
    • 检查网络是否通畅(防火墙设置)
    • 确认依赖版本是否兼容
  3. 配置无法读取

    • 检查 Data ID 是否与服务名 + 环境 + 格式匹配
    • 确认配置文件是否为 bootstrap.yml
    • 检查分组是否正确

总结

Nacos 作为微服务架构中的核心组件,提供了简洁高效的服务发现和配置管理能力。通过本文的介绍,你已经掌握了 Nacos 的基本安装、核心功能使用和集群部署要点。

在实际项目中,建议结合具体业务场景,合理规划配置分组和服务命名,同时做好集群监控和容灾设计,充分发挥 Nacos 的优势。


本文作者:
文章标签:Java指南微服务Spring Cloud服务治理
文章标题:Nacos 从入门到实战:服务发现与配置管理利器
本文地址:https://www.ducky.vip/archives/nacos.html
版权说明:若无注明,本文皆 iDuckie's Blog 原创,转载请保留文章出处。
最后修改:2024 年 03 月 09 日
如果觉得我的文章对你有用,请随意赞赏