Spring Cloud Alibaba实战01|Nacos入门服务注册与配置中心

导语

整套SCA实战项目完整源码已开源上传至Gitee,可直接克隆/下载ZIP使用:

源码仓库地址:gitee.com/xiaoyuancod...

本章是整套专栏开篇入门案例,基于 module-nacos-demo 模块手把手实操,一次性走完 Nacos 服务注册、远端配置读取、配置动态刷新完整流程,跟着操作就能复现全部效果。

技术版本

  • JDK 17
  • Spring Boot 3.5.0
  • Spring Cloud Alibaba 2025.0.0.0
  • Nacos 3.0.3

高频面试对比:Nacos vs Eureka

对比维度 Nacos Eureka
CAP架构 注册中心AP、配置中心CP双模式 仅AP架构,优先保证可用性
核心能力 注册中心+配置中心二合一 只具备服务注册发现能力
数据持久化 磁盘持久化,重启数据不丢失 纯内存存储,重启清空注册列表
多环境支持 Namespace+Group原生隔离 无原生多环境、分组能力
灰度流量 原生支持权重、灰度发布 无内置灰度、负载权重功能
生态现状 Spring Cloud Alibaba主流,持续维护 Netflix组件,官方早已停止迭代

面试小结:现在企业微服务基本统一选用 Nacos,一个组件搞定注册中心 + 配置中心,实用性拉满;Eureka 已经停止维护,仅作面试对比了解即可。

模块核心功能

  1. 整合Nacos Discovery,自动完成服务注册
  2. 整合Nacos Config,拉取远程yaml配置文件
  3. 通过@ConfigurationProperties绑定配置,支持动态刷新

本地实测刷新效果:修改 Nacos 控制台配置并发布,不用重启项目,再次请求接口就能拿到最新配置,非常适配微服务热更新场景。

一、Nacos本地安装启动(学习环境)

适配版本 Nacos 3.0.3

1. 下载安装包

地址:github.com/alibaba/nac...

2. 解压后终端进入bin目录单机启动

Mac/Linux:

bash 复制代码
cd nacos/bin
sh startup.sh -m standalone

Windows CMD:

cmd 复制代码
cd nacos/bin
startup.cmd -m standalone

3. 学习环境前置配置(必改 conf/application.properties)

打开 conf/application.properties,在末尾添加以下配置

properties 复制代码
nacos.core.auth.enabled=false
nacos.core.auth.plugin.nacos.token.secret.key=U2VjcmV0S2V5MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODk=

说明:

  • enabled=false 关闭安全认证,适合学习环境
  • 关闭后,server.identity.key/value 配置无效,可省略
  • 只需保留以上 2 行配置即可正常启动

4. 访问控制台

地址:http://127.0.0.1:8080,默认账号密码 nacos/nacos

5. 停止服务

bash 复制代码
sh shutdown.sh

6. 8080端口冲突处理

修改 conf/application.properties 更改控制台端口

properties 复制代码
nacos.console.port=8090

说明:启动日志出现 identity.key 相关提示不属于报错,关闭鉴权后不影响任何功能。

二、项目 Maven 依赖 pom.xml

xml 复制代码
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>com.xiaoyuancode</groupId>
        <artifactId>sca-study-demo</artifactId>
        <version>1.0-SNAPSHOT</version>
    </parent>

    <artifactId>module-nacos-demo</artifactId>
    <name>module-nacos-demo</name>
    <description>Nacos服务注册+配置中心实战</description>

   <dependencies>
       <!-- Web基础依赖 -->
       <dependency>
           <groupId>org.springframework.boot</groupId>
           <artifactId>spring-boot-starter-web</artifactId>
       </dependency>
       <!-- Nacos服务注册发现 -->
       <dependency>
           <groupId>com.alibaba.cloud</groupId>
           <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
       </dependency>
       <!-- Nacos配置中心 -->
       <dependency>
           <groupId>com.alibaba.cloud</groupId>
           <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
       </dependency>
       <!-- 配置属性绑定处理器 -->
       <dependency>
           <groupId>org.springframework.boot</groupId>
           <artifactId>spring-boot-configuration-processor</artifactId>
           <optional>true</optional>
       </dependency>
   </dependencies>
</project>

三、项目配置 application.yml

yaml 复制代码
server:
  port: 8081

spring:
  application:
    name: nacos-service-demo
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848 # 注册中心地址
      config:
        server-addr: 127.0.0.1:8848 # 配置中心地址
  config:
    import:
      - nacos:${spring.application.name}.yaml

四、核心 Java 代码

1. 启动类 NacosApplication.java

java 复制代码
package com.xiaoyuancode.sca.nacos;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

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

2. 配置绑定实体 DemoConfig.java

java 复制代码
package com.xiaoyuancode.sca.nacos.config;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;

@Configuration
@ConfigurationProperties(prefix = "demo")
public class DemoConfig {
    private String name;
    private String version;
    private String desc;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getVersion() {
        return version;
    }

    public void setVersion(String version) {
        this.version = version;
    }

    public String getDesc() {
        return desc;
    }

    public void setDesc(String desc) {
        this.desc = desc;
    }
}

3. 测试接口控制器 NacosTestController.java

java 复制代码
package com.xiaoyuancode.sca.nacos.controller;

import com.xiaoyuancode.sca.nacos.config.DemoConfig;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/sca/nacos")
public class NacosTestController {
    @Autowired
    private DemoConfig demoConfig;

    @Value("${spring.application.name}")
    private String applicationName;

    @GetMapping("/register")
    public String testRegister(){
        return "服务注册Nacos成功,服务名:" + applicationName;
    }

    @GetMapping("/config")
    public String testConfig(){
        System.out.println("demo.name: " + demoConfig.getName());
        System.out.println("demo.version: " + demoConfig.getVersion());
        System.out.println("demo.desc: " + demoConfig.getDesc());
        return demoConfig.getName() + " | " + demoConfig.getVersion() + " | " + demoConfig.getDesc();
    }
}

五、本地启动步骤

1. 启动 Nacos,控制台新建 Data Id:nacos-service-demo.yaml

yaml 复制代码
demo:
  name: 测试服务
  version: 1.0.0
  desc: Nacos配置中心测试

2. IDE运行 NacosApplication 启动项目

启动成功后,打开 Nacos 控制台服务管理 - 服务列表,能查到 nacos-service-demo 代表服务注册成功。

六、接口测试

Windows10/Win11自带curl直接复制命令执行;Win7老旧系统直接浏览器粘贴地址即可。

bash 复制代码
# 验证服务注册功能
curl http://localhost:8081/sca/nacos/register

# 读取Nacos远端配置
curl http://localhost:8081/sca/nacos/config

七、实操踩坑总结

  1. SpringBoot3 不会自动补全配置文件后缀,Nacos 的 Data Id 必须完整写xxx.yaml,否则读取不到配置
  2. 后续要被 OpenFeign 远程调用的服务,不能省略spring.cloud.nacos.discovery注册配置
  3. @ConfigurationProperties绑定前缀,必须和 Nacos 配置顶层 key 完全一致,否则字段注入为 null

小结

本章完整走完 Nacos 本地部署、项目整合全流程,落地服务注册、远程配置、动态刷新三大核心能力,同时梳理面试高频的 Nacos 与 Eureka 核心差异。 下一章:module-nacos-env-demo Nacos 多环境隔离实战。


作者简介

刘晓媛 | XiaoYuanCode

资深全栈开发,具备丰富前后端一体化业务系统落地经验。现阶段主攻 Java 微服务与 Spring AI,分享个人学习复盘与 RAG 工程化落地方案,所有案例均本地验证,配套代码可直接复用。

相关推荐
掘金者阿豪3 小时前
高可用读写分离实战(二):我把数据库主库停了,结果整个集群的反应和我想象的不一样
后端
掘金者阿豪3 小时前
《高可用读写分离集群实战》系列(一)
后端
Dilee3 小时前
Spring AI 2.0.0 Prompt 最小 Demo:system、user、template 到底怎么分工
后端
未秃头的程序猿3 小时前
Java 26正式发布!这3个新特性,让代码量直接减半
java·后端·面试
小旭Coding4 小时前
卧靠!Go 传给前端的 int64 竟然变成了这个?
后端
用户298698530144 小时前
Word 文档文本查找与替换的 Java 实现方案
java·后端
kunge20134 小时前
深度剖析Claude Code 的CLAUDE.md加载逻辑
后端·vibecoding