本专栏主打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 微服务实战(可直接运行)](#30分钟快速搭建 Spring Cloud Alibaba 微服务实战(可直接运行))
-
- 一、环境准备(1分钟)
-
- [1. 必须安装](#1. 必须安装)
- [2. 启动 Nacos(核心!)](#2. 启动 Nacos(核心!))
- 二、项目结构(4个微服务)
- [三、父工程 pom.xml(统一版本)](#三、父工程 pom.xml(统一版本))
- 四、服务提供者(provider-service)
-
- [1. pom.xml](#1. pom.xml)
- [2. application.yml](#2. application.yml)
- [3. 启动类 + 接口](#3. 启动类 + 接口)
- 五、服务消费者(consumer-service)
-
- [1. pom.xml](#1. pom.xml)
- [2. application.yml](#2. application.yml)
- [3. 启动类 + Feign 接口 + 控制层](#3. 启动类 + Feign 接口 + 控制层)
- 六、网关(gateway-server)
-
- [1. pom.xml](#1. pom.xml)
- [2. application.yml](#2. application.yml)
- [3. 启动类](#3. 启动类)
- 七、启动并体验微服务(最关键!)
-
- [1. 按顺序启动](#1. 按顺序启动)
- 八、测试接口(体验微服务调用)
-
- [1. 直接访问提供者](#1. 直接访问提供者)
- [2. 直接访问消费者(消费者远程调用提供者)](#2. 直接访问消费者(消费者远程调用提供者))
- [3. 通过网关访问(统一入口)](#3. 通过网关访问(统一入口))
- 九、你现在体验到的微服务能力
- 报错解决
30分钟快速搭建 Spring Cloud Alibaba 微服务实战(可直接运行)
我给你准备最简、可直接运行、无废话的一套 Spring Cloud Alibaba 微服务 demo,包含微服务核心组件:
- Nacos(服务注册/配置中心)
- 服务提供者(提供接口)
- 服务消费者(OpenFeign 远程调用)
- Gateway(网关统一入口)
一、环境准备(1分钟)
1. 必须安装
- JDK 8+ / 11
- Maven 3.6+
- IDEA / Eclipse
2. 启动 Nacos(核心!)
直接下载单机版 Nacos(不用改配置):
解压后执行:
bash
# Windows
bin/startup.cmd -m standalone
# Mac/Linux
bin/startup.sh -m standalone
在当前目录下右键点击在终端中打开,注意路径不要有中文


访问控制台:
账号密码: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. 按顺序启动
- Nacos(8848)
- provider-service(8081)
- consumer-service(8082)
- 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:80814.网关通过负载均衡(lb://)转发请求
把 /provider/api/hello 重写为 /api/hello5.请求到达 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/#/serviceManagementseata
PS E:\0WHXY\stfxs\seata-2.1.0-incubating-bin> bin/seata-server.bat -p 8091 -m fileerocketmq的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.cmdrocketmq的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
