Spring Cloud Alibaba + Nacos
在微服务世界里,每个服务就像一个忙碌的小摊位:有人负责订单,有人负责库存,还有人负责营销。要让整个城市有序运行,你需要一个 万能小助手 ------这就是 Nacos!
本文会从原理、配置、使用到高级功能全面讲解 Nacos 在 Spring Cloud Alibaba 微服务中的应用,让你看得明白、学得轻松。
1. Nacos 是什么?
Nacos(Dynamic Naming and Configuration Service)是阿里巴巴开源的微服务基础设施,主要功能包括:
功能 | 类比小故事 | 作用 |
---|---|---|
服务注册与发现 | 地图和摊位清单 | 让服务找到彼此,支持动态调用 |
配置管理 | 菜单和价格表 | 集中管理配置,实时更新 |
动态 DNS 服务 | 导航助手 | 根据健康状态和权重选择服务实例 |
简单说,Nacos 就像微服务的 智慧大脑:知道谁在哪、谁可用、谁需要更新菜单。
2. Spring Cloud Alibaba 如何召唤 Nacos
Spring Cloud Alibaba 提供了原生支持,让微服务像"召唤术"一样加入 Nacos 队伍。主要依赖:
xml
<!-- 服务注册与发现 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!-- 配置管理 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
比喻:就像给你的微服务装上"自动导航"和"实时菜单更新"的外挂。
3. Nacos 配置中心实战
3.1 基本配置
在 application.yml
中配置 Nacos 地址和命名空间:
yaml
spring:
application:
name: demo-service
cloud:
nacos:
config:
server-addr: 127.0.0.1:8848
namespace: public
file-extension: yaml
discovery:
server-addr: 127.0.0.1:8848
3.2 动态配置示例
- 在 Nacos 控制台创建配置:
yaml
demo:
message: "Hello, 微服务小伙伴!"
- 在 Spring Boot 中读取配置:
java
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;
@RefreshScope
@RestController
public class DemoController {
@Value("${demo.message}")
private String message;
@GetMapping("/message")
public String getMessage() {
return message;
}
}
改配置后
/message
的返回内容会立即更新,不用重启服务,好比"菜单自己更新了"。
3.3 @RefreshScope
@RefreshScope
可以让 Bean 在配置变化时自动刷新,就像给你的服务加了"感知眼睛",实时看到配置变化。
4. 服务注册与发现
4.1 服务端配置
在 application.yml
中:
yaml
spring:
application:
name: demo-service
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
服务启动时会自动注册到 Nacos,就像每家小摊位自己去报到,告诉地图"我开张啦!"
4.2 客户端发现服务
java
import org.springframework.cloud.client.discovery.DiscoveryClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@RestController
public class ServiceController {
private final DiscoveryClient discoveryClient;
public ServiceController(DiscoveryClient discoveryClient) {
this.discoveryClient = discoveryClient;
}
@GetMapping("/services")
public List<String> getServices() {
return discoveryClient.getServices();
}
}
访问 /services
,你就能看到当前注册到 Nacos 的所有服务列表,像看地图一样一目了然。
5. Nacos 高级技能
-
命名空间 & 分组
- 命名空间 = 不同城市
- 分组 = 城市里的不同区域
- 优点:环境隔离,避免配置冲突
-
动态刷新 & 灰度发布
- 使用
@RefreshScope
和版本分组 - 可以给一部分服务推送新配置,安全上线
- 使用
-
权重路由 & 健康检查
- 给服务设置权重,让高性能服务多接流量
- 健康检查自动剔除故障实例,保证调用成功率
-
多数据源 & 热加载
- 同时管理多应用、多环境配置
- 配置修改立即生效,无需重启
6. 实战经验分享
- 版本匹配:Spring Cloud Alibaba 与 Nacos 版本必须兼容,否则可能报错或刷新不生效
- 集群部署:生产环境 Nacos 建议集群模式,避免单点故障
- 配置规范:推荐 YAML,名字加前缀,便于维护
- 安全性:生产环境开启认证和 TLS,防止"陌生人进厨房"
7. 总结
Nacos 就像微服务世界的万能小助手:
- 帮你找到服务(注册与发现)
- 管理配置(实时更新菜单)
- 健康检查与权重路由(智能推荐)
结合 Spring Cloud Alibaba,微服务开发和运维都变得轻松又高效。
想象你的微服务队伍像一支乐队,Nacos 是那位全能指挥:每个小摊位都按节奏工作,整个系统运转顺畅又协调。