30分钟快速搭建 Spring Cloud Alibaba 微服务实战(一)

本专栏主打SpringBoot + SpringCloud 一站式综合案例实战,摒弃零散小Demo、淘汰老旧版本,全程基于主流稳定版本,带你从零搭建一套结构规范、功能完整、可直接落地的企业级微服务项目。很多Java开发者都会SpringBoot和SpringCloud的基础语法,却依然搭不出完整微服务架构、做不了企业级项目、面试讲不出项目亮点,核心问题就是缺少一套完整、连贯、贴近生产的实战案例。

内容包括:

✅服务注册与发现、✅统一网关、

✅配置中心、✅熔断降级、

✅负载均衡、✅链路追踪、

✅权限控制、✅业务模块拆分。

将所有知识点全部融入真实业务场景,做到学一个、用一个、整合一个,彻底打通微服务开发全流程。无论你是刚学微服务的在校同学、需要补齐项目经验的初级开发,还是想要系统梳理微服务架构的职场开发者,本专栏都能帮你快速建立完整的微服务知识体系,积累高质量实战项目经验,真正实现看得懂、写得出、讲得清、用得上。

系列目录

基础理论部分:
npm vs pip
Maven和普通java项目的区别
Maven 生命周期的核心逻辑
Spring 核心特性IOC、AOP
认识Springboot中的各种注解
SpringBoot 标准执行流程详解
Spring Cloud、Spring Cloud Alibaba、SpringBoot这些易混淆概念梳理
实战部分:
springboot测试综合实例(JUnit 5 + SpringBootTest + MockMvc + H2 + Mockito)
30分钟快速搭建 Spring Cloud Alibaba 微服务实战(一)
30分钟快速搭建 Spring Cloud Alibaba 微服务实战(二)
30分钟快速搭建 Spring Cloud Alibaba 微服务实战(三)

文章目录

30分钟快速搭建 Spring Cloud Alibaba 微服务实战(可直接运行)

我给你准备最简、可直接运行、无废话的一套 Spring Cloud Alibaba 微服务 demo,包含微服务核心组件:

  • Nacos(服务注册/配置中心)
  • 服务提供者(提供接口)
  • 服务消费者(OpenFeign 远程调用)
  • Gateway(网关统一入口)

一、环境准备(1分钟)

1. 必须安装

  • JDK 8+ / 11
  • Maven 3.6+
  • IDEA / Eclipse

2. 启动 Nacos(核心!)

直接下载单机版 Nacos(不用改配置):

👉 Nacos 2.3.2 下载

解压后执行:

bash 复制代码
# Windows
bin/startup.cmd -m standalone

# Mac/Linux
bin/startup.sh -m standalone

在当前目录下右键点击在终端中打开,注意路径不要有中文

访问控制台:

http://localhost:8848/nacos

账号密码:nacos / nacos

看到这个界面就成功了!

二、项目结构(4个微服务)

复制代码
spring-cloud-alibaba-demo
├── gateway-server        # 网关 8080
├── provider-service      # 服务提供者 8081
├── consumer-service      # 服务消费者 8082
└── pom.xml               # 父工程统一版本

右键父工程 → New → Module,创建第一个子模块

选择 Spring Initializr

名字填 provider-service(和你后面要写的 完全一致)

勾选 Spring Web 和 Nacos Discovery(后面再调整依赖也可以)

点 Finish,它会自动在父工程下创建 provider-service 文件夹和 pom

重复刚才步骤 ,创建另外两个子模块

分别创建 consumer-service 和 gateway-server

补充说明:

java 复制代码
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>3.5.13</version>
</parent>

❌️上面代码 <artifactId> spring-boot-starter-parent </artifactId>不能这样写,父工程是 Maven 聚合工程,不能加 Spring Boot 父依赖!

三、父工程 pom.xml(统一版本)

新建 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>

    <groupId>org.example</groupId>
    <artifactId>spring-cloud-alibaba-demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>pom</packaging>

    <modules>
        <module>provider-service</module>
        <module>consumer-service</module>
        <module>gateway-server</module>
    </modules>

    <!-- 正确版本:Spring Boot 3.5.13 专用 -->
    <properties>
        <java.version>17</java.version>
        <spring.boot.version>3.5.13</spring.boot.version>
        <spring.cloud.version>2023.0.1</spring.cloud.version>
        <spring.cloud.alibaba.version>2023.0.1.0</spring.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>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring.cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>

            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>${spring.cloud.alibaba.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

</project>

四、服务提供者(provider-service)

1. 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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.example</groupId>
        <artifactId>spring-cloud-alibaba-demo</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    <groupId>org.example</groupId>
    <artifactId>provider-service</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>provider-service</name>
    <description>provider-service</description>
    <url/>
    <licenses>
        <license/>
    </licenses>
    <developers>
        <developer/>
    </developers>
    <scm>
        <connection/>
        <developerConnection/>
        <tag/>
        <url/>
    </scm>
    <properties>
        <java.version>17</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

2. application.yml

yaml 复制代码
server:
  port: 8081

spring:
  application:
    name: provider-service
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848

3. 启动类 + 接口

java 复制代码
@SpringBootApplication
@EnableDiscoveryClient
public class ProviderApplication {
    public static void main(String[] args) {
        SpringApplication.run(ProviderApplication.class, args);
    }
}

// 提供接口
@RestController
@RequestMapping("/api")
public class ProviderController {
    @GetMapping("/hello")
    public String hello() {
        return "我是【微服务提供者】,端口:8081";
    }
}

五、服务消费者(consumer-service)

1. 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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.example</groupId>
        <artifactId>spring-cloud-alibaba-demo</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    <groupId>org.example</groupId>
    <artifactId>consumer-service</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>consumer-service</name>
    <description>consumer-service</description>
    <url/>
    <licenses>
        <license/>
    </licenses>
    <developers>
        <developer/>
    </developers>
    <scm>
        <connection/>
        <developerConnection/>
        <tag/>
        <url/>
    </scm>
    <properties>
        <java.version>17</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <!-- OpenFeign 远程调用 -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>
         <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-loadbalancer</artifactId>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

2. application.yml

yaml 复制代码
server:
  port: 8082

spring:
  application:
    name: consumer-service
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848

3. 启动类 + Feign 接口 + 控制层

java 复制代码
@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients  // 开启远程调用
public class ConsumerApplication {
    public static void main(String[] args) {
        SpringApplication.run(ConsumerApplication.class, args);
    }
}

// Feign 远程调用提供者
@FeignClient(name = "provider-service")
public interface ProviderFeign {
    @GetMapping("/api/hello")
    String hello();
}

// 消费者接口
@RestController
@RequestMapping("/api")
public class ConsumerController {
    @Autowired
    private ProviderFeign providerFeign;

    @GetMapping("/test")
    public String test() {
        return "【微服务消费者】调用提供者 => " + providerFeign.hello();
    }
}

六、网关(gateway-server)

1. 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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.example</groupId>
        <artifactId>spring-cloud-alibaba-demo</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    <groupId>org.example</groupId>
    <artifactId>gateway-server</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>gateway-server</name>
    <description>gateway-server</description>
    <url/>
    <licenses>
        <license/>
    </licenses>
    <developers>
        <developer/>
    </developers>
    <scm>
        <connection/>
        <developerConnection/>
        <tag/>
        <url/>
    </scm>
    <properties>
        <java.version>17</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-gateway</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-loadbalancer</artifactId>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

2. application.yml

yaml 复制代码
server:
  port: 8080

spring:
  application:
    name: gateway-server
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848
    gateway:
      routes:
        - id: provider
          uri: lb://provider-service
          predicates:
            - Path=/provider/**
          filters:
            - RewritePath=/provider/(?<segment>.*), /$\{segment}

        - id: consumer
          uri: lb://consumer-service
          predicates:
            - Path=/consumer/**
          filters:
            - RewritePath=/consumer/(?<segment>.*), /$\{segment}

3. 启动类

java 复制代码
@SpringBootApplication
@EnableDiscoveryClient
public class GatewayApplication {
    public static void main(String[] args) {
        SpringApplication.run(GatewayApplication.class, args);
    }
}

七、启动并体验微服务(最关键!)

1. 按顺序启动

  1. Nacos(8848)
  2. provider-service(8081)
  3. consumer-service(8082)
  4. gateway-server(8080)

打开 Nacos 控制台 → 服务管理 → 服务列表

你会看到 3 个服务全部注册成功

八、测试接口(体验微服务调用)

1. 直接访问提供者

http://localhost:8081/api/hello

2. 直接访问消费者(消费者远程调用提供者)

http://localhost:8082/api/test

3. 通过网关访问(统一入口)

访问:网关 → 提供者

http://localhost:8080/provider/api/hello

完整流程(按顺序走)

1.浏览器请求到达 Gateway 网关(8080)

2.网关根据 Path 路由匹配

看到 /provider/** → 匹配到 provider 这条路由

3.网关从 Nacos 拉取服务列表

问 Nacos:provider-service 在哪?

Nacos 回答:在 localhost:8081

4.网关通过负载均衡(lb://)转发请求

把 /provider/api/hello 重写为 /api/hello

5.请求到达 provider-service(8081)

6.提供者执行 Controller 方法,返回结果

7.结果原路返回网关 → 再返回浏览器

九、你现在体验到的微服务能力

✅ 服务注册发现(Nacos)

✅ 服务间远程调用(OpenFeign)

✅ 统一网关入口(Spring Cloud Gateway)

✅ 负载均衡(默认 Ribbon/LoadBalancer)

✅ 微服务多模块独立部署

报错解决

你有可能会报错

原因是:在 Spring Boot 3.x 环境下,这个问题 90% 都是因为 Gateway 缺少 spring-cloud-starter-loadbalancer 依赖,导致 lb:// 协议无法解析,无法转发请求到 provider-service。

解决方法是:Spring Boot 3.x 里,lb:// 协议需要单独引入负载均衡依赖,否则会报错:这是 Spring Boot 3.x 的变化,原来的 Ribbon 被移除了,必须手动引入 spring-cloud-starter-loadbalancer。

在 gateway-server 的 pom.xml 里添加:下面代码

xml 复制代码
xml
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>

另外在consumer-service中也要添加

xml 复制代码
xml
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>

因为feign也需要loadbalancer不然会报错

本系列最终所有服务启动命令整理

  • nacos
    PS E:\0WHXY\stfxs\nacos-server-2.3.2\nacos> bin/startup.cmd -m standalone
    nacos界面访问http://localhost:8848/nacos/#/serviceManagement
  • seata
    PS E:\0WHXY\stfxs\seata-2.1.0-incubating-bin> bin/seata-server.bat -p 8091 -m filee
  • rocketmq的nameserver
    PS E:\0WHXY\stfxs\rocketmq-all-4.9.4-bin> $env:ROCKETMQ_HOME="E:\0WHXY\stfxs\rocketmq-all-4.9.4-bin"
    PS E:\0WHXY\stfxs\rocketmq-all-4.9.4-bin> bin/mqnamesrv.cmd
  • rocketmq的broker
    PS E:\0WHXY\stfxs\rocketmq-all-4.9.4-bin> $env:ROCKETMQ_HOME="E:\0WHXY\stfxs\rocketmq-all-4.9.4-bin"
    PS E:\0WHXY\stfxs\rocketmq-all-4.9.4-bin> bin/mqbroker.cmd -n localhost:9876 -c ./conf/broker.conf
  • 启动rocketmq的面板
    PS E:\0WHXY\stfxs> java -jar rocketmq-dashboard-2.1.0.jar
    rocketmq的面板界面访问http://localhost:8082/
  • 启动rocketmq的面板
    PS E:\0WHXY\stfxs> java -jar rocketmq-dashboard-2.1.0.jar
    rocketmq的面板界面访问http://localhost:8082/
  • 启动sentinel的面板
    PS E:\0WHXY\stfxs> java "-Dserver.port=8858" -jar .\sentinel-dashboard-1.8.9.jar
    sentinel的面板界面访问http://localhost:8858/#/dashboard
相关推荐
Cosolar1 小时前
从零写一个 Attention Is All You Need
人工智能·面试·架构
qcx233 小时前
【系统学AI】09 Multi-Agent架构(2026版):从学术理论到工业级实践
java·人工智能·架构·multi-agent·claude agent
wb043072014 小时前
厨房质检员——从阿明的“祖传配方“到标准化质检,看测试金字塔的落地
架构·log4j
Dongwoo Jeong4 小时前
微服务架构(MSA)是如何诞生的?
微服务·云原生·架构
半旧夜夏4 小时前
【保姆级】微服务组件环境搭建(Docker Compose版)
java·linux·spring cloud·微服务·云原生·容器
张忠琳5 小时前
【kubernetes v1.21】(kubelet 1)Kubelet 核心架构与启动流程
云原生·架构·kubernetes·kubelet
用户987409238875 小时前
超算中心 高性能计算 htc命令module use的作用
架构
AI科技星6 小时前
基于**v=c(空间光速螺旋运动)唯一第一性原理**重新完整求导证明
人工智能·线性代数·算法·机器学习·架构·概率论·学习方法
__log6 小时前
如何优雅地“借鉴”任何网站的设计系统
人工智能·架构·知识图谱