9.3 KiB
9.3 KiB
Nacos 服务注册与发现中心
本文档说明 ERP 微服务架构中 Nacos 的配置与使用方法。
📁 目录结构
nacos/
├── README.md # 本文档
├── docker-compose.standalone.yml # 单机模式 Docker Compose
├── docker-compose.cluster.yml # 集群模式 Docker Compose (3节点)
├── init/
│ └── mysql-schema.sql # Nacos MySQL 持久化 Schema
├── cluster/
│ └── nginx.conf # Nacos 集群 Nginx 负载均衡配置
├── examples/
│ ├── nacos-api-usage.md # Nacos REST API 使用示例
│ ├── ServiceRegistrationExample.java # 服务注册示例代码
│ ├── HealthCheckConfig.java # 健康检查配置示例
│ └── client-config/
│ ├── nacos-client.properties # 通用 Nacos 客户端配置
│ ├── bootstrap.yml # Spring Cloud bootstrap 配置模板
│ └── user-service-nacos.yml # user-service 完整配置示例
└── scripts/
└── startup.sh # Nacos 启动脚本
🚀 快速开始
1. 启动 Nacos(单机模式)
cd /root/.openclaw/workspace/erp-java-backend/nacos
# 方式一:使用脚本
chmod +x scripts/startup.sh
./scripts/startup.sh --mode standalone
# 方式二:直接使用 Docker Compose
docker compose -f docker-compose.standalone.yml up -d
# 方式三:使用 docker-compose 命令
docker-compose -f docker-compose.standalone.yml up -d
2. 访问 Nacos 控制台
- 地址: http://localhost:8848/nacos
- 用户名:
nacos - 密码:
nacos123456
3. 验证服务注册
访问控制台 → 服务管理 → 服务列表,应能看到已注册的服务。
🏗 架构说明
单机模式 (Standalone)
┌─────────────────┐
│ Microservices │
│ (Spring Boot) │
└───────┬─────────┘
│ HTTP/gRPC
▼
┌─────────────────┐
│ Nacos Server │ ◄── 单节点
│ (v2.2.3) │
└───────┬─────────┘
│
▼
┌─────────────────┐
│ MySQL │ ◄── 持久化存储
│ (8.0) │
└─────────────────┘
集群模式 (Cluster)
┌─────────────────┐
│ Nginx (LB) │
│ :8848, :9848 │
└───────┬─────────┘
│
┌───────────────────────┼───────────────────────┐
▼ ▼ ▼
┌───────────────┐ ┌───────────────┐ ┌───────────────┐
│ Nacos Node 1 │ │ Nacos Node 2 │ │ Nacos Node 3 │
│ :8848 │◄────►│ :8848 │◄────►│ :8848 │
│ :9848 │ │ :9848 │ │ :9848 │
│ :9849 │ │ :9849 │ │ :9849 │
└───────┬───────┘ └───────┬───────┘ └───────┬───────┘
│ │ │
└───────────────────────┼───────────────────────┘
│
▼
┌───────────────┐
│ MySQL │
│ (8.0) │
└───────────────┘
⚙️ 配置说明
环境变量
| 变量名 | 说明 | 默认值 |
|---|---|---|
NACOS_SERVER_ADDR |
Nacos 服务器地址 | 127.0.0.1:8848 |
NACOS_NAMESPACE |
命名空间 ID | public |
NACOS_GROUP |
分组名称 | DEFAULT_GROUP |
NACOS_USERNAME |
Nacos 用户名 | nacos |
NACOS_PASSWORD |
Nacos 密码 | nacos123456 |
SPRING_PROFILES_ACTIVE |
Spring 环境 | dev |
微服务配置
方式一:修改 application.yml
在各微服务的 application.yml 中添加:
spring:
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
namespace: public
group: DEFAULT_GROUP
prefer-ip-address: true
cluster-name: DEFAULT
config:
server-addr: ${spring.cloud.nacos.discovery.server-addr}
file-extension: yaml
shared-configs:
- data-id: common-config.yaml
group: DEFAULT_GROUP
refresh: true
方式二:使用 bootstrap.yml(推荐)
将 examples/client-config/bootstrap.yml 复制到微服务 src/main/resources/,并根据需要修改。
方式三:环境变量覆盖
java -jar app.jar \
-DNACOS_SERVER_ADDR=127.0.0.1:8848 \
-DNACOS_NAMESPACE=public \
-DNACOS_GROUP=DEFAULT_GROUP
📋 微服务列表与配置
| 服务名 | 端口 | Context Path | 说明 |
|---|---|---|---|
api-gateway |
8080 | / |
API网关 |
user-service |
8082 | /user |
用户服务 |
tenant-service |
8083 | /tenant |
租户服务 |
product-service |
8084 | /product |
产品服务 |
order-service |
8085 | /order |
订单服务 |
inventory-service |
8086 | /inventory |
库存服务 |
finance-service |
8087 | /finance |
财务服务 |
notification-service |
8088 | /notification |
通知服务 |
file-service |
8089 | /file |
文件服务 |
admin-service |
8090 | /admin |
管理服务 |
🏥 健康检查配置
默认健康检查
Nacos 默认通过 TCP 端口检测 判断实例健康状态。
自定义健康检查(推荐)
使用 Spring Boot Actuator:
management:
endpoints:
web:
exposure:
include: health,info,metrics
endpoint:
health:
show-details: always
health:
nacos:
enabled: true
健康检查流程
1. 客户端每 5秒 向 Nacos 发送心跳
2. Nacos 15秒 未收到心跳,标记为不健康
3. Nacos 30秒 未收到心跳,删除实例
4. 服务恢复后,自动重新注册
🌐 Nacos API 调用
详细 API 调用示例见 nacos-api-usage.md
服务注册
curl -X POST 'http://127.0.0.1:8848/nacos/v1/ns/instance' \
-d 'serverIp=127.0.0.1' \
-d 'serverPort=8082' \
-d 'serviceName=user-service'
服务发现
curl -s 'http://127.0.0.1:8848/nacos/v1/ns/instance/list?serviceName=user-service'
配置管理
# 发布配置
curl -X POST 'http://127.0.0.1:8848/nacos/v1/cs/configs' \
-d 'dataId=user-service.yaml' \
-d 'group=DEFAULT_GROUP' \
-d 'content=spring: datasource: url: jdbc:mysql://localhost:3307'
# 查询配置
curl -s 'http://127.0.0.1:8848/nacos/v1/cs/configs?dataId=user-service.yaml&group=DEFAULT_GROUP'
🔐 安全配置
生产环境必改项
-
修改默认密码
NACOS_AUTH_ENABLE: "true" NACOS_AUTH_TOKEN: "YourNewSecretKeyHere..." -
启用认证
spring.cloud.nacos.discovery.username=nacos spring.cloud.nacos.discovery.password=YourNewPassword -
网络隔离
- 使用内网 IP,不暴露公网
- 配置防火墙规则
- 使用 VIP/Nginx 做负载均衡
🚢 部署到 Kubernetes
集群模式配置见 docker-compose.cluster.yml
关键配置
- 3节点部署: 推荐奇数节点,保证 Raft 共识算法正常
- MySQL 外部化: 生产环境使用主从 MySQL
- Nginx 负载均衡: 统一入口,分发到 3 个 Nacos 节点
- 持久化: 使用 PVC 挂载日志和数据目录
❓ 常见问题
1. 微服务无法注册到 Nacos
- 检查 Nacos 是否启动:
curl http://localhost:8848/nacos/v1/console/health/readiness - 检查网络连通性:
telnet localhost 8848 - 检查防火墙:
firewall-cmd --list-ports
2. 控制台登录失败
- 默认用户名/密码:
nacos/nacos123456 - 检查认证是否启用:
NACOS_AUTH_ENABLE=true
3. gRPC 端口无法连接
- Nacos 2.x 使用 9848/9849 端口进行 gRPC 通信
- 确保这些端口已开放
4. 配置不生效
- 检查
refresh-enabled: true是否设置 - 使用
@RefreshScope注解刷新配置 - 检查命名空间和分组是否匹配