9.9.1 Spring Cloud Alibaba与Nacos定位

Spring Cloud Alibaba与Nacos定位#

在 Spring Cloud Alibaba 体系中,Nacos 作为注册中心+配置中心的统一入口,承担“服务治理基座”的角色。它等价于 Eureka + Config 的组合,但更强调统一控制面与动态治理能力。

原理草图(定位关系)

文章图片

核心定位与职责
- 注册中心:服务注册、发现、健康检查、实例管理、命名空间隔离。
- 配置中心:集中配置、动态刷新、灰度发布、版本回滚。
- 治理基座:与 Sentinel、Gateway、Seata 形成完整治理链路。


安装与快速验证(单机示例)#

目的:本节强调“定位”,但仍需可运行的最小示例验证其角色。

1)启动 Nacos(单机)

# 解压后进入目录
cd /opt/nacos/bin

# 单机模式启动
./startup.sh -m standalone

# 检查端口
ss -lntp | grep 8848

2)验证控制台访问

# 默认账号密码 nacos/nacos
curl -s http://127.0.0.1:8848/nacos

Spring Cloud Alibaba 最小集成示例#

目标:展示 Nacos 作为注册与配置中心的定位。

1)项目依赖(pom.xml)

<dependencies>
  <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>
</dependencies>

2)应用配置(src/main/resources/application.yml)

spring:
  application:
    name: order-service
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
        namespace: public
      config:
        server-addr: 127.0.0.1:8848
        file-extension: yaml

server:
  port: 8081

3)在 Nacos 创建配置(控制台或 curl)

# 发布配置:Data ID = order-service.yaml
curl -X POST "http://127.0.0.1:8848/nacos/v1/cs/configs" \
  -d "dataId=order-service.yaml&group=DEFAULT_GROUP&content=feature.flag=true"

4)验证配置读取(示例接口)

@RefreshScope
@RestController
public class DemoController {
  @Value("${feature.flag:false}")
  private boolean featureFlag;

  @GetMapping("/flag")
  public String flag() { return String.valueOf(featureFlag); }
}

命令解释与定位关联#

  • startup.sh -m standalone:启动 Nacos 控制面,提供注册与配置入口。
  • nacos-discovery:应用注册到 Nacos,形成服务发现。
  • nacos-config:应用配置从 Nacos 读取并支持动态刷新。
  • dataId=order-service.yaml:与应用名对应,体现“配置中心定位”。

排错要点(定位相关)#

  1. 服务未注册
# 查看注册实例
curl "http://127.0.0.1:8848/nacos/v1/ns/instance/list?serviceName=order-service"
  • 无实例:检查 spring.cloud.nacos.discovery.server-addr 是否正确。
  • 实例不健康:检查应用健康端口与防火墙。
  1. 配置不生效
# 拉取配置内容
curl "http://127.0.0.1:8848/nacos/v1/cs/configs?dataId=order-service.yaml&group=DEFAULT_GROUP"
  • 无内容:检查 dataIdgroup 是否匹配。
  • 仍不生效:确认 @RefreshScope 与 actuator 刷新配置已启用。
  1. 端口冲突
ss -lntp | grep 8848
# 若被占用,修改 conf/application.properties 中 server.port

运维落地建议(定位导向)#

  • 命名空间隔离:配置中心与注册中心统一隔离多环境。
  • 统一入口:将 Nacos 作为治理入口,减少组件碎片化。
  • 配合 CI/CD:配置变更与灰度发布联动,提高可控性。

练习#

  1. 启动 Nacos,并用 curl 注册一个服务实例,观察控制台变化。
  2. order-service 发布配置,修改 feature.flag,验证动态刷新。
  3. namespace 改为自定义值,观察服务与配置是否隔离。