一、安装
\[Docker常用的容器#nacos\]
二、服务注册与发现
以在项目中添加服务发现依赖
xml
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
在配置文件中配置Nacos注册中心的地址:
yml
spring:
application:
name: service-order
profiles:
active: dev # 当前环境
include: feign # 包含feign配置
config:
import:
- nacos:common.yml
- nacos:database.yml
cloud:
nacos:
server-addr: 192.168.88.139:8848
discovery:
username: nacos
password: nacos
# namespace: f923fb34-cb0a-4c06-8fca-ad61ea61a3f0
# group: DEFAULT_GROUP
# register-enabled: false # 禁用注册
config:
namespace: 39ee5118-3bac-42d8-91d8-58a7f2ba0c12 # 命名空间
username: nacos
password: nacos
group: order # 分区
- Namespace (命名空间):用于环境隔离(如 Dev, Test, Prod)
- Group (分组):用于区分不同的项目或模块,默认是 DEFAULT_GROUP
接着启动服务,可以在Nacos的服务列表中找到:

扩展(了解即可)
java
/**
* 功能: 测试 Nacos 服务注册与发现
* 作者: 沙琪马
* 日期: 2025/11/17 14:32
*/
@SpringBootTest
public class DiscoveryTest {
@Resource
private DiscoveryClient discoveryClient; // Spring Cloud 标准接口
@Resource
private NacosDiscoveryClient nacosDiscoveryClient; // Nacos 特有实现
/**
* 使用 Nacos 特有客户端获取服务列表及实例
*/
@Test
void testNacosDiscoveryClient() {
System.out.println("=== 使用 NacosDiscoveryClient ===");
List<String> services = nacosDiscoveryClient.getServices();
for (String service : services) {
System.out.println("Service: " + service);
List<Instance> instances = nacosDiscoveryClient.getInstances(service);
instances.forEach(instance ->
System.out.println(" → " + instance.getIp() + ":" + instance.getPort())
);
}
}
/**
* 使用标准 DiscoveryClient 获取服务(推荐,解耦)
*/
@Test
void testDiscoveryClient() {
System.out.println("=== 使用 DiscoveryClient(标准)===");
List<String> services = discoveryClient.getServices();
for (String service : services) {
System.out.println("Service: " + service);
List<ServiceInstance> instances = discoveryClient.getInstances(service);
instances.forEach(instance ->
System.out.println(" → " + instance.getHost() + ":" + instance.getPort())
);
}
}
}
三、远程调用
这里主要使用 [[2、OpenFeign]] 来实现了
四、配置中心
数据隔离
- 需求描述
- 项目有多套环境:dev、test、prod
- 每个微服务,同一种配置,在每套环境的值都不一样
- 项目可以通过切换环境,加载本环境的配置
- 难点
- 区分多套环境
- 区分多种微服务
- 区分多种配置
- 按需加载配置
总结
注册中心
- 引入 spring-cloud-starter-alibaba-nacos-discovery 依赖,配置Nacos地址
- @EnableDiscoveryClient 开启服务发现功能(默认是开启的)
扩展
- ={red}DiscoveryClient= 获取服务实例列表
- ={red}LoadBalancerClient= 负载均衡选择一个实例(需要引入 spring-cloud-starter-loadbalancer)
- ={red}RestTemplate= 可以发起远程调用
配置中心
- 引入 spring-cloud-starter-alibaba-nacos-config 依赖,配置Nacos地址
- 添加数据集 (data-id),使用 ={orange}spring.config.import= 导入数据集
- ~={orange}@Value + @RefreshScope=~ 取值 + 自动刷新
- @ConfigurationProperties 默认就支持自动刷新
- ={orange}NacosConfigManager= 监听配置变化
扩展:
配置优先级;namespace区分环境、group区分微服务、data-id区分配置 实现 数据隔离+环境切换
面试题
Nacos中的数据集 和 application.properties 有相同的配置项,哪个生效?
答案 :
以配置中心的配置为准,实现快捷的统一管理