1. Nacos 简介
Nacos 是阿里巴巴开源的一个动态服务发现、配置管理和服务管理平台,支持:
- 服务注册与发现:微服务实例自动注册和健康检查。
- 配置管理:集中化管理应用配置,支持动态更新。
- 服务管理:可视化界面管理服务及元数据。
2. 安装与启动
2.1 下载 Nacos
- 访问 Nacos GitHub Releases 下载最新版本(如 nacos-server-2.x.x.zip)。https://github.com/alibaba/nacos/releases
- 解压文件:
- unzip nacos-server-2.x.x.zip cd nacos/bin
2.2 启动 Nacos
- 单机模式(适合开发):
- sh startup.sh -m standalone # Linux startup.cmd -m standalone # Windows
- 访问控制台:http://localhost:8848/nacos,默认账号密码:nacos/nacos。
3. 服务注册与发现
3.1 添加依赖
在 Spring Boot 项目中添加依赖(以 Spring Cloud Alibaba 为例):
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>2022.0.0.0</version>
</dependency>
3.2 配置服务注册
在 application.yml 中配置 Nacos 地址:
spring:
application:
name: user-service # 服务名称
cloud:
nacos:
discovery:
server-addr: localhost:8848 # Nacos 地址
3.3 启用服务发现
在启动类添加注解:
@SpringBootApplication
@EnableDiscoveryClient // 启用服务发现
public class UserApplication {
public static void main(String[] args) {
SpringApplication.run(UserApplication.class, args);
}
}
3.4 调用其他服务
使用 RestTemplate 或 OpenFeign 调用其他服务:
@RestController
public class UserController {
@Autowired
private RestTemplate restTemplate;
@GetMapping("/order")
public String getOrder() {
// 通过服务名调用(order-service 是另一个服务的名称)
return restTemplate.getForObject("http://order-service/orders", String.class);
}
}
4. 配置管理
4.1 创建配置文件
- 进入 Nacos 控制台 → 配置管理 → 配置列表 → 新建配置。
- 填写配置信息:
- Data ID: user-service-dev.yaml(格式:{服务名}-{环境}.yaml)
- Group: DEFAULT_GROUP
- 配置内容:
- server: port: 8080 app: name: user-service
4.2 获取配置
在项目中添加依赖:
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
<version>2022.0.0.0</version>
</dependency>
创建 bootstrap.yml(优先级高于 application.yml):
spring:
application:
name: user-service # 对应 Data ID 的前缀
profiles:
active: dev # 对应 Data ID 的环境
cloud:
nacos:
config:
server-addr: localhost:8848
file-extension: yaml # 配置文件格式
在代码中读取配置:
@Value("${app.name}")
private String appName;
@GetMapping("/config")
public String getConfig() {
return appName;
}
4.3 动态配置更新
Nacos 支持配置动态更新。添加 @RefreshScope 注解使配置实时生效:
@RestController
@RefreshScope
public class ConfigController {
@Value("${app.name}")
private String appName;
}
5. 常见问题
5.1 服务注册失败
- 检查 Nacos 服务是否启动。
- 确认 spring.cloud.nacos.discovery.server-addr 配置正确。
5.2 配置未生效
- 确保 bootstrap.yml 文件存在且配置正确。
- 检查 Data ID 和 Group 是否与 Nacos 中的配置一致。
5.3 控制台无法访问
- 确认防火墙是否放行 8848 端口。
- 检查启动日志是否有错误:nacos/logs/start.out
6. 注意事项
- 版本兼容性:确保 Spring Cloud Alibaba、Spring Boot 和 Nacos 版本兼容(参考官方文档)。https://github.com/alibaba/spring-cloud-alibaba/wiki/%E7%89%88%E6%9C%AC%E8%AF%B4%E6%98%8E
- 生产环境:使用集群模式部署 Nacos,并配置 MySQL 持久化(默认使用内嵌数据库)。
- 安全:修改默认账号密码,开启鉴权(通过 application.properties 配置)。
通过以上步骤,您可以快速实现服务注册、发现与配置管理。更多高级功能(如集群部署、命名空间、配置灰度发布)可参考 Nacos 官方文档。
https://nacos.io/zh-cn/docs/what-is-nacos.html