Spring Boot 3.0微服务实战:从零搭建高可用系统(附避坑指南)

avatar
莫雨IP属地:上海
02026-02-18:22:00:39字数 4155阅读 0

去年我们团队升级Spring Boot 3.0时,老大拍着桌子说:“上云!必须用微服务!”结果第一版部署直接翻车——服务注册失败、配置乱成一团、压测时直接崩了。折腾了两周才跑通。今天不扯虚的,直接上真实踩坑经验,手把手教你从零搭出能扛住大流量的系统。


一、环境准备:别踩这些坑

关键点:Spring Boot 3.0必须用Java 17+,别用JDK 11!
在pom.xml里先干掉这些坑:

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>3.0.0</version> <!-- 必须是3.0+ -->
</parent>

<properties>
    <java.version>17</java.version> <!-- 重点!别写11 -->
</properties>

血泪教训
我同事在本地跑得好好的,一部署到测试环境就报NoClassDefFoundError,查了三天才发现是JDK版本混了。现在公司强制所有项目用JDK 17,别省事。


二、核心组件:Nacos+Sentinel组合拳

为什么选Nacos?
Eureka太老,Zookeeper太重,Nacos(阿里巴巴开源)又支持服务注册、配置中心、熔断,一锅端。

1. 服务注册与发现(最基础但最易错)

application.yml里配Nacos:

spring:
  cloud:
    nacos:
      server-addr: 127.0.0.1:8848 # 本地Nacos地址
      discovery:
        # 必须加!否则服务不注册
        register-enabled: true

关键配置
在启动类加@EnableDiscoveryClient(不是@EnableEurekaClient!)
踩坑点

  • 没加register-enabled: true → 服务注册失败,日志全是No service instance found
  • Nacos端口写错(比如写成8849)→ 服务注册超时,排查半天

2. 配置中心(动态刷新救命稻草)

把数据库密码、超时时间这些扔进Nacos Config:

  1. 在Nacos控制台新建配置:

    • Data ID:user-service.properties
    • Group:DEFAULT_GROUP
    • 内容:spring.datasource.password=123456
  2. 服务端配置:

@Configuration
public class Config {
    @Value("${spring.datasource.password}")
    private String dbPassword;
    
    // 用@RefreshScope让配置热更新
    @Bean
    @RefreshScope
    public DataSource dataSource() {
        return DataSourceBuilder.create().password(dbPassword).build();
    }
}

真实案例
上线时发现密码写错,直接在Nacos改配置,不用重启服务!比以前动不动就重启强100倍。


三、高可用核心:Sentinel熔断实战

为什么必须加Sentinel?
没熔断的微服务,一个接口卡死,整个系统全崩。去年我们服务被流量冲垮,就是没配熔断。

1. 添加依赖(pom.xml)

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>

2. 配置熔断规则(Nacos里配)

在Nacos控制台:

  • 点击“流控规则” → 新建规则
  • 资源名:/api/user/{id}(对应Controller路径)
  • 流控阈值:500(QPS)
  • 熔断策略:慢调用比例 → 慢调用比例阈值:0.5(50%慢请求触发熔断)

效果
当接口平均响应时间>500ms且占比超50%,自动熔断,返回友好错误页,而不是让请求堆积。


四、从零搭一个服务:用户服务示例

步骤1:创建Spring Boot项目

用Spring Initializr选:

  • Spring Web
  • Nacos Discovery
  • Nacos Config
  • Sentinel

步骤2:写个简单接口(UserController.java

@RestController
@RequestMapping("/api/user")
public class UserController {
    
    @GetMapping("/{id}")
    public User getUser(@PathVariable Long id) {
        // 模拟慢请求(测试熔断用)
        if (id % 2 == 0) {
            try { Thread.sleep(1000); } catch (InterruptedException e) {}
        }
        return new User(id, "user" + id);
    }
}

步骤3:启动服务

  1. 先启动Nacos(下载地址
  2. 启动服务,访问http://localhost:8080/api/user/1
  3. 用JMeter压测:1000并发,QPS 500(看Nacos控制台服务列表,确认注册成功)

高可用验证
当接口响应超时,Sentinel自动弹出熔断页面,其他请求不受影响。之前没配熔断时,压测到200 QPS就卡死。


五、避坑指南(全是血泪)

  1. Spring Cloud版本冲突

    • 问题:spring-cloud-starter-alibaba-nacos-discovery 用2.2.6.RELEASE,Spring Boot 3.0需要2.2.10+
    • 解决:在pom.xml统一管理版本:
      <dependencyManagement>
          <dependencies>
              <dependency>
                  <groupId>com.alibaba.cloud</groupId>
                  <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                  <version>2022.0.0.0</version>
                  <type>pom</type>
                  <scope>import</scope>
              </dependency>
          </dependencies>
      </dependencyManagement>
      
  2. Nacos配置热更新失效

    • 问题:改了Nacos配置,服务不刷新
    • 解决:必须加@RefreshScope(Bean上)+ @Value读取,别用@ConfigurationProperties(Spring Boot 3.0有兼容问题)
  3. Sentinel控制台不显示

    • 问题:访问http://localhost:8080/sc 404
    • 解决:在application.yml加:
      server:
        port: 8080
      spring:
        cloud:
          sentinel:
            enabled: true
            # 指定控制台地址
            transport:
              dashboard: localhost:8080
      
      注意:Sentinel控制台单独下载,不是Spring Boot自带。

六、为什么说“高可用”?

  • 服务注册:Nacos自动发现,4台机器部署,1台挂了其他3台顶上
  • 配置动态:数据库密码改了,Nacos一改,服务秒刷新
  • 熔断兜底:接口超时自动降级,返回{"code":503,"msg":"服务不可用"}
  • 监控:Sentinel看板实时显示QPS、错误率、熔断状态(比以前用Prometheus简单多了)

结语:别再等了

Spring Boot 3.0 + Nacos + Sentinel这套组合,我们线上跑了3个月,从原来的300 QPS提升到1500+,没再出现过服务雪崩。
现在就做

  1. 升级JDK 17
  2. 用Spring Initializr建个新项目
  3. 按着避坑指南配Nacos和Sentinel

别被“微服务”吓到,它就是把大应用拆成小服务,再用这些工具管好。去年我团队被坑的,今年都成了老手。

总资产 0
暂无其他文章

热门文章

暂无热门文章