SpringBoot3 + Nacos + Sentinel 微服务完整实战(Java17/21 适配)

标签:#SpringBoot3 #Nacos #Sentinel #微服务 #Java 后端 #高可用

阅读人群:Java 后端、微服务开发、架构师、面试求职者

阅读收益:从零搭建可运行微服务工程,掌握配置中心、服务注册发现、流量熔断限流全套生产方案,适配 Java17/21 新项目标准

一、前言

2026 年企业微服务技术栈已经完成标准化升级:

  1. SpringBoot3 + SpringCloud 6 成为新项目标配,最低要求 Java17,推荐 Java21;
  2. Nacos 替代 Eureka、Consul,同时兼顾服务注册发现统一配置中心
  3. Sentinel 作为轻量级流量防护组件,实现限流、熔断、降级、系统自适应保护,适配云原生微服务;
  4. 传统 Dubbo+SpringCloud 混合架构逐步统一为 SpringCloud Alibaba 体系。

很多开发者单独会用 Nacos、Sentinel,但缺少三者整合落地完整流程,本文提供可直接复制运行的完整工程代码,无冗余配置,规避生产高频踩坑点。

二、技术版本选型(生产稳定组合)

组件 版本 说明
JDK 17/21 SpringBoot3 强制最低 JDK17
SpringBoot 3.2.x 长期稳定分支
SpringCloud Alibaba 2023.0.1.2 适配 Boot3
Nacos 2.3.2 服务注册 + 配置中心
Sentinel 1.8.7 流量防护控制台
Maven 3.8+ 构建工具

三、父工程 pom 依赖统一管理

<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.micro</groupId>
    <artifactId>micro-parent</artifactId>
    <version>1.0.0</version>
    <packaging>pom</packaging>
    <modules>
        <module>micro-user</module>
    </modules>

    <properties>
        <java.version>17</java.version>
        <spring.boot.version>3.2.5</spring.boot.version>
        <cloud.alibaba.version>2023.0.1.2</cloud.alibaba.version>
    </properties>

    <!-- 统一版本锁定 -->
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>${spring.boot.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>${cloud.alibaba.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <dependencies>
        <!-- 通用工具 -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
    </dependencies>
</project>

四、微服务子模块 pom(用户服务示例 micro-user)

<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <groupId>com.micro</groupId>
        <artifactId>micro-parent</artifactId>
        <version>1.0.0</version>
        <relativePath>../pom.xml</relativePath>
    </parent>

    <modelVersion>4.0.0</modelVersion>
    <artifactId>micro-user</artifactId>
    <name>用户微服务</name>

    <dependencies>
        <!-- SpringBoot 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>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>
        <!-- Sentinel 流量防护 -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
        </dependency>
        <!-- 健康检查监控 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
    </dependencies>
</project>

五、bootstrap.yml 核心配置(Nacos 必用)

SpringBoot3 读取配置中心优先加载bootstrap.yml,将服务地址、环境、命名空间统一配置:

spring:
  application:
    name: micro-user
  cloud:
    # Nacos注册中心
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
        namespace: dev
      # Nacos配置中心
      config:
        server-addr: 127.0.0.1:8848
        namespace: dev
        file-extension: yaml
        group: DEFAULT_GROUP
    # Sentinel控制台配置
    sentinel:
      transport:
        dashboard: 127.0.0.1:8080
        port: 8719
  profiles:
    active: dev

server:
  port: 8001

配置说明

  1. spring.application.name 必须与 Nacos 配置文件名一致:micro-user-dev.yaml
  2. namespace 区分开发、测试、生产环境,隔离配置;
  3. sentinel.transport.dashboard 指向本地 Sentinel 控制台地址。

六、项目启动类

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

@SpringBootApplication
// 开启Nacos服务注册
@EnableDiscoveryClient
public class MicroUserApplication {
    public static void main(String[] args) {
        SpringApplication.run(MicroUserApplication.class, args);
    }
}

七、业务接口 + Sentinel 限流熔断实战

7.1 基础 Controller

import com.alibaba.csp.sentinel.annotation.SentinelResource;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class UserController {

    /**
     * Sentinel资源注解:绑定限流/熔断规则
     * blockHandler:限流触发兜底方法
     * fallback:业务异常熔断兜底
     */
    @GetMapping("/user/get/{id}")
    @SentinelResource(value = "getUserInfo", blockHandler = "flowBlockHandler", fallback = "errorFallback")
    public String getUserInfo(@PathVariable Long id) {
        // 模拟业务查询
        if (id < 0) {
            throw new RuntimeException("非法用户ID");
        }
        return "查询用户成功,ID:" + id;
    }

    // 限流兜底(仅处理流量超限)
    public String flowBlockHandler(Long id) {
        return "系统繁忙,请稍后重试!当前访问量过高";
    }

    // 异常熔断兜底(业务报错降级)
    public String errorFallback(Long id) {
        return "服务异常,触发降级,ID:" + id;
    }
}

7.2 控制台配置规则操作步骤

  1. 启动 Nacos:startup.cmd -m standalone
  2. 启动 Sentinel 控制台:java -jar sentinel-dashboard-1.8.7.jar
  3. 启动 micro-user 服务,访问一次接口触发 Sentinel 客户端注册;
  4. 控制台流量规则配置:
    • 资源名:getUserInfo
    • 阈值类型:QPS
    • 单机阈值:2(每秒最多 2 次请求)
  5. 熔断规则:设置异常比例 0.5,触发后熔断 5 秒。

八、Nacos 配置中心使用示例

在 Nacos 后台新建配置 micro-user-dev.yaml

user:
  upload-size: 10MB
  page-size: 10

代码动态读取配置:

import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class ConfigController {

    @Value("${user.page-size}")
    private Integer pageSize;

    @GetMapping("/config/get")
    public String getConfig() {
        return "分页大小配置:" + pageSize;
    }
}

修改 Nacos 配置无需重启服务,实时刷新生效。

九、生产环境高频踩坑总结

9.1 Nacos 常见问题

  1. SpringBoot3 不识别 bootstrap.yml:需引入spring-cloud-starter-bootstrap依赖;
  2. 注册失败:检查 namespace、服务名、IP 端口是否连通;
  3. 配置不刷新:添加@RefreshScope注解到读取配置类。

9.2 Sentinel 常见问题

  1. 控制台看不到服务:必须先访问一次接口激活客户端;
  2. 规则重启丢失:生产需对接 Nacos 持久化限流规则;
  3. 兜底方法不生效:参数、返回值必须与原接口完全一致。

9.3 JDK17 适配坑

  1. 移除 javax 包,统一使用 jakarta;
  2. 反射默认限制,部分框架需添加启动参数开放反射;
  3. Lombok 版本需匹配 SpringBoot3,低版本编译报错。

十、生产扩展方案

  1. Nacos 集群部署:3 节点集群保证注册中心高可用;
  2. Sentinel 规则持久化:将限流、熔断规则存入 Nacos,重启不丢失;
  3. Feign 远程调用:整合 OpenFeign 实现微服务之间调用,配合 Sentinel 全局降级;
  4. 日志链路追踪:接入 SkyWalking 实现分布式链路排查;
  5. Java21 虚拟线程:改造 Web 容器使用虚拟线程,提升高并发吞吐。

十一、总结

SpringBoot3 + Nacos + Sentinel 是目前中小厂、大厂通用轻量微服务架构,对比 SpringCloud 原生组件拥有部署简单、运维成本低、功能一体化的优势。

作为 Java 后端开发者,这套技术栈是面试、项目开发必备技能:Nacos 管控配置与服务治理,Sentinel 保障服务不雪崩,二者结合彻底解决微服务分布式、高并发稳定性问题。

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐