一、背景与目标
在微服务架构中,Nacos 不仅可作为服务注册中心,还能作为动态配置中心。本文将通过以下步骤实现:
- 在Linux上部署单机版Nacos(使用Docker)
- 将服务A和服务B注册到Nacos
- 利用Nacos配置中心管理多环境配置(dev/prod分组)
- 本地服务连接Nacos配置中心的配置方法
二、部署Nacos单机服务(Linux+Docker)
1. 安装Docker(如已安装可跳过)
# 卸载旧版本(可选)
sudo yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine
# 安装依赖
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
# 添加Docker仓库
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# 安装Docker引擎
sudo yum install docker-ce docker-ce-cli containerd.io
# 启动Docker
sudo systemctl start docker
sudo systemctl enable docker
2. 使用Docker部署Nacos
# 创建Nacos数据目录(持久化配置)
mkdir -p /opt/nacos/{logs,conf,data}
# 拉取Nacos镜像(以2.0.3版本为例)
docker pull nacos/nacos-server:v2.0.3
# 启动Nacos容器(单机模式)
docker run -d \
--name nacos-server \
-p 8848:8848 \
--restart=always \
-e MODE=standalone \
-v /opt/nacos/logs:/home/nacos/logs \
-v /opt/nacos/conf:/home/nacos/conf \
-v /opt/nacos/data:/home/nacos/data \
nacos/nacos-server:v2.0.3
关键参数解释:
-e MODE=standalone:单机模式(生产建议集群)-v挂载目录:持久化日志、配置、数据- 访问控制台:
http://服务器IP:8848/nacos(默认账号:nacos/nacos)
三、SpringCloud服务注册与配置中心接入
1. 项目依赖配置(pom.xml)
<!-- SpringCloud Alibaba 版本管理 -->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2021.0.5.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<!-- Nacos服务发现 + 配置中心 -->
<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>
2. 本地配置文件(bootstrap.yml)
spring:
application:
name: service-a # 服务名(对应Nacos Data ID)
profiles:
active: dev # 环境标识(dev/prod)
cloud:
nacos:
discovery:
server-addr: 192.168.1.100:8848 # Nacos地址
namespace: 9a3a8d7b-xxxx-xxxx-xxxx-xxxxxxxx # 命名空间ID(可选)
group: DEV_GROUP # 服务分组(默认DEFAULT_GROUP)
config:
server-addr: ${spring.cloud.nacos.discovery.server-addr}
namespace: ${spring.cloud.nacos.discovery.namespace}
group: ${spring.cloud.nacos.discovery.group}
file-extension: yaml # 配置文件格式
refresh-enabled: true # 开启动态刷新
3. Nacos控制台配置管理
-
创建命名空间(如dev/prod)
- 命名空间ID建议用UUID(如
dev-namespace)
- 命名空间ID建议用UUID(如
-
添加配置文件
- Data ID:
service-a-dev.yaml(格式:${spring.application.name}-${profile}.${file-extension}) - Group:
DEV_GROUP - 内容示例:
# 自定义配置(如数据库连接) db: url: jdbc:mysql://localhost:3306/dev_db username: dev_user
- Data ID:
四、Nacos配置中心高级功能
1. 配置分组(Group)
- 用途:区分不同环境/业务线的配置
- 操作:在同一个命名空间下,通过
Group隔离配置(如DEV_GROUP、PROD_GROUP)
2. 动态配置刷新
- 实现:在代码中使用
@RefreshScope注解@RestController @RefreshScope public class ConfigController { @Value("${db.url}") private String dbUrl; }
3. 多文件配置
- 场景:拆分公共配置与业务配置
- Data ID命名规则:
- 共享配置:
shared-config.yaml(所有服务读取) - 服务专属:
service-a-dev.yaml
- 共享配置:
五、验证与调试
-
服务注册验证
访问http://nacos-ip:8848/nacos,在“服务管理”中查看服务A/B的注册状态。 -
配置拉取验证
在服务启动日志中搜索: Loaded config data from nacos, dataId: service-a-dev.yaml -
动态刷新测试
修改Nacos中的配置,观察服务日志是否输出: Refresh keys changed: [db.url]
六、注意事项
- 生产环境建议:
- 使用Nacos集群部署
- 开启Nacos鉴权(配置
nacos.core.auth.enabled=true) - 配置MySQL持久化(替换内嵌Derby)
- 版本兼容性
确保SpringCloud Alibaba与SpringBoot版本匹配(官方版本说明)。