下载工作台
Spring Cloud 微服务

Nacos 注册与配置中心

试读上半部分 · 解锁后可读全文

第 2 章 · Nacos 注册发现与配置中心

本章目标:在 svc-spring-demo 中集成 Nacos 实现服务注册与发现;将 application.yml 配置迁移至 Nacos Config 并支持动态刷新;理解命名空间、分组、Data ID 规则;掌握健康检查与多实例负载雏形;使用虚构域名 nacos.example.com(本地 127.0.0.1:8848)与 api.example.com 网关前置关系。

学时建议:5~6 小时(含 2 小时 Docker 启动 Nacos 与三服务联调)

前置spring-cloud-web ch01spring-boot-web ch01~ch12;本机可运行 Docker 或下载 Nacos Server 压缩包。


2.1 Nacos 在架构中的位置

┌──────────────┐     注册/心跳      ┌─────────────────────┐
│  user-svc    │──────────────────►│  nacos.example.com  │
│  product-svc │──────────────────►│  :8848              │
│  order-svc   │──────────────────►│  注册中心 + 配置中心 │
└──────────────┘                    └─────────────────────┘
        ▲                                      │
        │         订阅配置 / 拉取服务列表         │
        └──────────────────────────────────────┘
能力作用svc-spring-demo 中的例子
服务发现实例注册、健康剔除、供 LoadBalancer 选实例product-svc 两个实例 8082/8092
配置管理集中 YAML、按环境隔离、动态刷新product-svc-dev.yaml
元数据版本、权重、自定义 label灰度发布(概念)
教学环境统一使用 nacos.example.com 作文档占位;hosts 或 /etc/hosts 可指向 127.0.0.1。严禁写入真实生产 Nacos 地址或密钥。

2.2 安装与启动 Nacos Server

2.2.1 Docker Compose(推荐)

svc-spring-demo/docs/docker-compose.dev.yml

services:
  nacos:
    image: nacos/nacos-server:v2.3.2
    container_name: nacos-standalone
    environment:
      MODE: standalone
      NACOS_AUTH_ENABLE: "true"
      NACOS_AUTH_TOKEN: "SecretKeyForTeachingOnlyReplaceInProd123456789012345678901234567890"
      NACOS_AUTH_IDENTITY_KEY: serverIdentity
      NACOS_AUTH_IDENTITY_VALUE: security
    ports:
      - "8848:8848"
      - "9848:9848"
    volumes:
      - nacos_data:/home/nacos/data

volumes:
  nacos_data:
cd svc-spring-demo/docs
docker compose -f docker-compose.dev.yml up -d
# 控制台:http://127.0.0.1:8848/nacos  默认用户 nacos / nacos(仅本地)

2.2.2 控制台初识

菜单用途
服务管理 → 服务列表查看 user-svcproduct-svc 实例 IP:端口
配置管理 → 配置列表编辑各服务 Data ID
命名空间隔离 dev / test / prod
集群管理多节点部署(生产);本章 standalone 即可

2.3 服务注册发现:依赖与配置

2.3.1 Maven 依赖(以 svc-product 为例)

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

2.3.2 application.yml(本地引导)

spring:
  application:
    name: product-svc
  cloud:
    nacos:
      discovery:
        server-addr: ${NACOS_ADDR:127.0.0.1:8848}
        namespace: ${NACOS_NAMESPACE:dev}
        group: SVC_SPRING_DEMO
        username: ${NACOS_USER:nacos}
        password: ${NACOS_PASSWORD:nacos}
        metadata:
          version: "1.0.0"
          region: "local"

server:
  port: ${SERVER_PORT:8082}

management:
  endpoints:
    web:
      exposure:
        include: health,info
  endpoint:
    health:
      show-details: when_authorized

spring.application.name 即 Nacos 上的服务名,Gateway 与 Feign 通过此名称发现实例(ch03/ch04)。

2.3.3 启动类

@SpringBootApplication
@EnableDiscoveryClient
public class ProductSvcApplication {
    public static void main(String[] args) {
        SpringApplication.run(ProductSvcApplication.class, args);
    }
}

Spring Cloud 2023 中 @EnableDiscoveryClient 有时可省略(自动装配),显式标注便于教学阅读。


2.4 验证注册:多实例与元数据

启动两个 product-svc 实例:

# 终端 1
SERVER_PORT=8082 ./mvnw -pl svc-product spring-boot:run

# 终端 2
SERVER_PORT=8092 ./mvnw -pl svc-product spring-boot:run

在 Nacos 控制台应看到 product-svc 下 2 个健康实例。临时下线:停止其中一个进程,约 15~30 秒后实例标记不健康。

概念说明
心跳客户端定期上报;超时剔除
临时实例进程挂掉自动注销(默认)
权重负载比例,默认 1
保护阈值防止雪崩时误删全部实例

2.5 配置中心:Nacos Config

2.5.1 依赖

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>

Spring Cloud 2023 仍常用 bootstrap.yml(或 spring.config.import 方式,二选一,本课程用 bootstrap 保持清晰)。

2.5.2 bootstrap.yml

spring:
  application:
    name: product-svc
  cloud:
    nacos:
      config:
        server-addr: ${NACOS_ADDR:127.0.0.1:8848}
        namespace: ${NACOS_NAMESPACE:dev}
        group: SVC_SPRING_DEMO
        file-extension: yaml
        username: ${NACOS_USER:nacos}
        password: ${NACOS_PASSWORD:nacos}

以下内容需解锁后阅读

试读已结束。解锁本章 ¥5.00,或开通年度会员畅读全部教程。
年度会员 ¥199.00/年; 小紫 AI 工作台有效会员 ¥99.00/年

正文仅在服务端鉴权后下发,未付费无法获取下半部分内容。