什么是 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:直接下载安装包(推荐)
下载最新稳定版安装包
# 以 2.3.2 版本为例(请替换为最新版本) wget https://github.com/alibaba/nacos/releases/download/2.3.2/nacos-server-2.3.2.tar.gz解压安装包
tar -zxvf nacos-server-2.3.2.tar.gz cd nacos/bin移动Nacos(单机模式)
# Linux/Mac sh startup.sh -m standalone # Windows cmd startup.cmd -m standalone- 访问控制台
- 地址:http://localhost:8848/nacos
- 默认账号密码:nacos /nacos
方式 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. 配置管理
新建配置
- 登录 Nacos 控制台,进入「配置管理」→「配置列表」
点击「+」新增配置,填写信息:
- Data ID:通常使用「服务名 - 环境.yml」格式(如
user-service-dev.yml) - Group:默认
DEFAULT_GROUP即可(可自定义分组) - 配置格式:选择 YAML
配置内容:
server: port: 8081 user: name: 张三 age: 18
- Data ID:通常使用「服务名 - 环境.yml」格式(如
- 点击「发布」保存配置
在 Spring Boot 中使用配置
添加依赖(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>创建配置文件
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 中的环境对应编写测试代码
@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; } }- 测试动态配置:在 Nacos 控制台修改配置并发布,无需重启服务,访问接口即可看到更新结果
2. 服务发现
服务注册(Spring Cloud 示例)
添加依赖(pom.xml)
<dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> <version>2021.0.5.0</version> </dependency>配置服务注册信息(application.yml)
spring: cloud: nacos: discovery: server-addr: localhost:8848 # Nacos 服务地址在启动类添加注解
@SpringBootApplication @EnableDiscoveryClient // 开启服务注册发现功能 public class UserServiceApplication { public static void main(String[] args) { SpringApplication.run(UserServiceApplication.class, args); } }- 启动服务后,在 Nacos 控制台「服务管理」→「服务列表」中可看到注册的服务
服务调用(使用 OpenFeign)
添加 OpenFeign 依赖
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency>创建 Feign 客户端接口
@FeignClient(name = "order-service") // 目标服务名 public interface OrderServiceClient { @GetMapping("/order/{id}") String getOrderById(@PathVariable("id") Long id); }- 在启动类添加
@EnableFeignClients注解 调用服务
@RestController public class UserController { @Autowired private OrderServiceClient orderServiceClient; @GetMapping("/user/order/{id}") public String getUserOrder(@PathVariable Long id) { // 调用订单服务 return orderServiceClient.getOrderById(id); } }
Nacos 集群部署(生产环境必备)
单机模式仅用于开发测试,生产环境需部署集群以保证高可用。
集群部署步骤概要
- 准备 3 台服务器(或虚拟机),确保网络互通
- 每台服务器安装 Nacos
- 配置 MySQL 数据库(存储集群元数据)
修改
conf/cluster.conf文件,添加所有节点地址192.168.1.101:8848 192.168.1.102:8848 192.168.1.103:8848- 修改
conf/application.properties配置数据库连接 - 分别启动所有节点(无需指定 standalone 参数)
- 配置负载均衡器(如 Nginx)转发请求到集群节点
常见问题解决
Nacos 启动失败
- 检查端口是否被占用(默认 8848)
- 确保 JDK 版本符合要求
- 查看 logs 目录下的日志文件排查具体错误
服务注册不上
- 检查服务端地址是否正确
- 检查网络是否通畅(防火墙设置)
- 确认依赖版本是否兼容
配置无法读取
- 检查 Data ID 是否与服务名 + 环境 + 格式匹配
- 确认配置文件是否为 bootstrap.yml
- 检查分组是否正确
总结
Nacos 作为微服务架构中的核心组件,提供了简洁高效的服务发现和配置管理能力。通过本文的介绍,你已经掌握了 Nacos 的基本安装、核心功能使用和集群部署要点。
在实际项目中,建议结合具体业务场景,合理规划配置分组和服务命名,同时做好集群监控和容灾设计,充分发挥 Nacos 的优势。