这次我们来看一个完整度很高的微服务实战技术栈:AlibabaCloud 与 SpringCloud 的组合应用。与其说这是一个开源项目,不如说是一套企业级微服务落地解决方案,围绕服务注册、配置中心、网关路由、服务调用、限流熔断、分布式事务等核心场景,把 Spring Cloud 生态和 Spring Cloud Alibaba 组件串联起来。小D课堂的《新一代微服务全家桶 AlibabaCloud 与 SpringCloud 实战》课程已经完结,内容不是单独讲某个组件,而是按真实项目节奏,带着你从零搭出一套可运行的微服务骨架。
这套技术栈最值得关注的地方,是它并不止于 Spring Cloud 的基础概念,而是大量使用了 Nacos、Sentinel、Seata、Gateway、OpenFeign 这些生产环境真正会用的组件。你可以把这篇文章当作一套独立的实战笔记来用:不需要先看视频,先把环境准备好,然后从搭建父工程开始,逐步把注册中心、配置中心、网关、服务调用、流控和分布式事务都验证一遍。整个过程强调“能跑起来、能调用通、能看出问题”,不是背概念。
如果你已经熟悉 Spring Boot,正在准备把单体应用拆成微服务,或者想在团队内部搭建一套统一的服务治理框架,这篇文章可以直接收藏。文章里的命令和配置都是通用示例,具体版本号需要按照你本机的 Spring Boot 和 Spring Cloud Alibaba 版本进行调整,但操作路径是稳定的。
1. 核心能力速览
| 能力项 | 说明 |
|---|---|
| 项目类型 | Spring Cloud + Spring Cloud Alibaba 微服务实战技术栈 |
| 主要组件 | Nacos、Spring Cloud Gateway、OpenFeign、Sentinel、Seata |
| 主要功能 | 服务注册发现、分布式配置、统一网关、声明式服务调用、流量控制、熔断降级、分布式事务 |
| 适合场景 | 单体应用微服务拆分、企业级服务治理、中后台系统架构升级 |
| 推荐环境 | 普通开发机即可,建议 8G 内存以上,本地搭建 Nacos 和多个 Spring Boot 服务 |
| 启动方式 | Nacos 单独启动,各微服务通过 IDEA 或 Maven 命令启动 |
| 是否支持 API | 支持,微服务通过网关暴露统一 HTTP API |
| 是否支持批量任务 | 支持,可通过网关批量调用服务接口,或结合消息队列、定时任务框架实现 |
| 学习门槛 | 需要掌握 Spring Boot、Maven、HTTP/JSON 基础 |
从材料看,这套课程的内容覆盖面比较完整,不是简单讲一个 Demo,而是按“可运维、可扩展”的方向去组织的。对于想系统学习微服务的人来说,先跟着这样一条完整链路跑通,比零散地看组件文档更容易建立全局观。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 适用场景与使用边界
2.1 适合谁用
- 已经开始使用 Spring Boot,但项目还停留在单体架构,想逐步拆分的团队。
- 需要在多个服务之间做统一配置管理、服务发现和网关路由的技术负责人。
- 准备调研 Spring Cloud Alibaba 生产落地可行性的开发同学。
- 正在准备微服务架构面试,想通过本地实战验证核心原理的人。
2.2 能解决什么问题
这套组合能解决微服务落地中最常见的基础设施问题:
- 服务多了以后,调用地址难以维护,需要注册中心统一管理。
- 配置散落在各个服务和本地文件里,需要配置中心集中管理。
- 客户端请求需要统一入口,避免直接暴露每个服务的地址。
- 服务之间的 HTTP 调用代码冗余,需要声明式调用组件。
- 高并发下单个服务抖动,需要通过流量控制和熔断防止雪崩。
- 跨多个数据库的业务操作,需要分布式事务保证一致性。
2.3 不适合什么场景
不是所有项目都适合微服务。如果你只是一个小型管理系统,业务简单、团队人数少,用 Spring Boot 单体应用反而更高效。微服务会引入分布式调试、网络延迟、运维复杂度和版本兼容问题,这些都要付出额外成本。Spring Cloud Alibaba 的组件版本跟随 Spring Cloud 版本迭代,升级时需要注意配套关系,如果盲目引入最新版本,很容易在启动阶段就遇到依赖冲突。
2.4 合规与安全边界
涉及生产环境时,一定要重视几个边界:
- Nacos、Gateway 等服务不要直接暴露公网,必须放在内网或经过安全的网关策略保护。
- 配置中心里的数据库密码、Redis 密码等敏感信息,不能明文存储,要使用加密或外部密钥管理。
- 课程中如果包含业务代码、示例数据,只可用于个人学习,不要原样复制到商业项目中。
- 涉及用户信息和业务数据时,需要严格遵循授权和隐私保护要求,不能因为使用了微服务组件就忽略数据合规。
3. 环境准备与前置条件
3.1 基础环境清单
在开始搭建之前,建议先确认以下环境:
| 工具 | 版本建议 | 说明 |
|---|---|---|
| JDK | 8 或 17 | 根据 Spring Boot 版本选择,Spring Boot 2.x 常用 JDK8,Spring Boot 3.x 需要 JDK17 |
| Maven | 3.6 以上 | 项目管理工具 |
| IDEA | 2021 以上 | 开发工具,安装 Lombok、Spring 插件更顺手 |
| Docker | 可选 | 用于快速启动 Nacos、MySQL、Seata 等中间件 |
| MySQL | 5.7 或 8.x | 业务库存储,配置中心和业务数据都需要 |
| 端口 | 8848、9848、8080 等 | Nacos 和网关服务会占用,注意别被本地程序占用 |
3.2 检测本机环境
打开终端,执行以下命令确认环境可用:
bash复制java -version
mvn -v
docker --version
如果命令都能正常输出版本信息,说明基础环境没问题。
3.3 准备 Nacos 服务
Spring Cloud Alibaba 中最常用的注册配置中心是 Nacos。本地开发可以直接用 Docker 单机模式启动:
bash复制docker run --name nacos -p 8848:8848 -p 9848:9848 -e MODE=standalone nacos/nacos-server:latest
如果你不想使用 Docker,也可以从 Nacos 官方下载安装包,解压后在 bin 目录执行:
bash复制# Linux / Mac
sh startup.sh -m standalone
# Windows
startup.cmd -m standalone
启动成功后,浏览器访问 http://127.0.0.1:8848/nacos,默认账号密码都是 nacos。这里重点确认两个端口:8848 是 HTTP 访问端口,9848 是 gRPC 通信端口,新版 Nacos 客户端连接时需要放通这两个端口。
4. 搭建微服务骨架
4.1 模块规划
为了体现真实的微服务结构,这里创建一个最小但完整的工程,包含三个服务模块:
code复制microservice-app
├── pom.xml
├── user-service # 用户服务
├── order-service # 订单服务
└── gateway-service # 网关服务
user-service 和 order-service 注册到 Nacos,order-service 通过 OpenFeign 调用 user-service,所有外部请求都先经过 gateway-service,再路由到具体服务。
4.2 父工程 POM
父工程的核心作用是统一管理依赖版本,避免每个子模块各自维护版本号。创建一个 pom.xml,打包方式为 pom,并在 dependencyManagement 中引入 Spring Cloud 和 Spring Cloud Alibaba 的 BOM:
xml复制<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>${spring-boot.version}</version>
<relativePath/>
</parent>
<properties>
<spring-boot.version>换成你的版本</spring-boot.version>
<spring-cloud.version>换成你的版本</spring-cloud.version>
<spring-cloud-alibaba.version>换成你的版本</spring-cloud-alibaba.version>
</properties>
<dependencyManagement>
<dependencies>
<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>
这里刻意没有写死具体版本号,因为 Spring Cloud Alibaba 的版本必须和 Spring Boot、Spring Cloud 匹配。更稳妥的判断是:先确认自己使用的 Spring Boot 版本,再去 Spring Cloud Alibaba 官方文档找到对应的版本列表。版本选对了,后续启动才能少踩坑。
4.3 子模块基础依赖
以 user-service 为例,需要添加 Web、Nacos 服务发现等依赖:
xml复制<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>
5. 服务注册与配置中心:Nacos 实战
5.1 注册服务到 Nacos
在 user-service 的 application.yml 中配置服务名称和 Nacos 地址:
yaml复制spring:
application:
name: user-service
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
server:
port: 8081
启动类上加 @EnableDiscoveryClient(新版本不加也可以,但加上更明确):
java复制package com.example.user;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
@SpringBootApplication
@EnableDiscoveryClient
public class UserServiceApplication {
public static void main(String[] args) {
SpringApplication.run(UserServiceApplication.class, args);
}
}
启动一个简单的用户接口供后续测试:
java复制@RestController
@RequestMapping("/user")
public class UserController {
@GetMapping("/{id}")
public String getUser(@PathVariable Long id) {
return "user-" + id;
}
}
启动服务后,打开 Nacos 控制台,在“服务管理 -> 服务列表”中能看到 user-service 已经注册成功,状态为健康。同样方式再启动一个 order-service,端口设置为 8082,并在 Nacos 控制台看到两个服务都在线。这时的核心验证目标是:服务之间通过服务名互相发现,而不是硬编码 IP。
5.2 使用 Nacos 做分布式配置
在微服务架构中,配置不放在本地 application.yml,而是放到 Nacos 配置中心统一管理。添加依赖:
xml复制<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
在 bootstrap.yml 或 spring.config.import 中配置 Nacos 配置中心地址。以传统方式为例:
yaml复制spring:
cloud:
nacos:
config:
server-addr: 127.0.0.1:8848
file-extension: yml
在 Nacos 控制台创建一个配置,Data ID 为 user-service.yml,内容可以是:
yaml复制app:
info: user-service config from nacos
然后在代码中使用 @Value 读取配置,并用 @RefreshScope 支持动态刷新:
java复制@RestController
@RefreshScope
public class ConfigController {
@Value("${app.info}")
private String appInfo;
@GetMapping("/config")
public String config() {
return appInfo;
}
}
验证方式:先启动服务,访问 /config 看到 Nacos 里的配置值;然后回到 Nacos 控制台修改该配置并发布,再次访问 /config,如果值已经变化,说明动态配置生效。这个功能在实际生产环境非常关键,避免了修改配置后重启服务。
6. 服务调用与负载均衡:OpenFeign 实战
6.1 引入 OpenFeign
微服务之间最常用的调用方式是 HTTP。OpenFeign 可以让调用方像定义本地接口一样调用远程服务,代码更简洁,也更容易统一拦截和日志。在 order-service 中添加依赖:
xml复制<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
启动类添加 @EnableFeignClients:
java复制@SpringBootApplication
@EnableFeignClients
public class OrderServiceApplication {
public static void main(String[] args) {
SpringApplication.run(OrderServiceApplication.class, args);
}
}
6.2 声明 Feign 客户端
在 order-service 中定义用户服务调用接口:
java复制package com.example.order.client;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
@FeignClient(name = "user-service")
public interface UserClient {
@GetMapping("/user/{id}")
String getUser(@PathVariable("id") Long id);
}
这里 name = "user-service" 表示通过 Nacos 找到 user-service 实例。Spring Cloud 的新版本默认集成了 LoadBalancer 负载均衡客户端,也就是说,如果 user-service 启动了两个实例,调用时会自动按负载均衡策略分发请求。
6.3 完成一次接口调用
在 order-service 中写一个接口,内部通过 Feign 调用用户服务:
java复制@RestController
@RequestMapping("/order")
public class OrderController {
private final UserClient userClient;
public OrderController(UserClient userClient) {
this.userClient = userClient;
}
@GetMapping("/create/{userId}")
public String createOrder(@PathVariable Long userId) {
String userInfo = userClient.getUser(userId);
return "order created, user = " + userInfo;
}
}
启动 order-service 后,直接访问 http://127.0.0.1:8082/order/create/100,如果返回类似 order created, user = user-100 的结果,说明服务发现、Feign 调用和负载均衡链路已经全部打通。
7. 统一入口与路由转发:Spring Cloud Gateway
7.1 为什么需要网关
微服务拆分后,客户端不能直接记住 user-service 的 8081 端口和 order-service 的 8082 端口。网关作为统一入口,负责路由转发、跨域处理、鉴权、限流等。网关服务本身也是一个 Spring Boot 应用,但通常不使用 Spring MVC,而是使用 WebFlux。
7.2 创建网关服务
新建 gateway-service 模块,添加依赖:
xml复制<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
在 application.yml 配置路由,将 /api/user/** 转发到 user-service,将 /api/order/** 转发到 order-service:
yaml复制server:
port: 8080
spring:
application:
name: gateway-service
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
gateway:
routes:
- id: user-route
uri: lb://user-service
predicates:
- Path=/api/user/**
filters:
- StripPrefix=1
- id: order-route
uri: lb://order-service
predicates:
- Path=/api/order/**
filters:
- StripPrefix=1
lb:// 表示通过负载均衡方式从 Nacos 获取服务实例。StripPrefix=1 表示在转发时去掉第一级路径 /api,这样 /api/user/1 会变成 /user/1 转发给 user-service。
启动网关服务后,访问 http://127.0.0.1:8080/api/user/1,应返回 user-1;访问 http://127.0.0.1:8080/api/order/create/100,应返回订单创建成功和用户信息。网关层一旦跑通,后面所有微服务接口都只暴露这一个入口即可。
8. 流量控制与服务容错:Sentinel 接入
8.1 引入 Sentinel 依赖
高并发场景下,如果某个下游服务响应变慢,调用方线程会被大量阻塞,最终影响整个系统。Sentinel 提供了限流、熔断降级、系统保护等能力。在 order-service 中添加依赖:
xml复制<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
8.2 配置 Sentinel Dashboard
先启动 Sentinel 控制台(可以下载官方 Dashboard jar,然后运行),再在服务配置中指定控制台地址:
yaml复制spring:
cloud:
sentinel:
transport:
dashboard: 127.0.0.1:8858
注意:Sentinel 控制台端口通常和 Nacos 不同,这里使用 8858 为例,实际以你启动的 Dashboard 端口为准。
8.3 使用 Sentinel 保护业务接口
可以通过注解 @SentinelResource 定义资源,并指定 blockHandler 处理被流控时的逻辑:
java复制@RestController
@RequestMapping("/order")
public class OrderController {
private final UserClient userClient;
public OrderController(UserClient userClient) {
this.userClient = userClient;
}
@GetMapping("/create/{userId}")
@SentinelResource(value = "createOrder", blockHandler = "createOrderBlock")
public String createOrder(@PathVariable Long userId) {
String userInfo = userClient.getUser(userId);
return "order created, user = " + userInfo;
}
public String createOrderBlock(Long userId, BlockException ex) {
return "当前请求过多,请稍后重试";
}
}
启动服务后,第一次访问接口,Sentinel 才会完成初始化,之后在控制台上就能看到 createOrder 这个资源。你可以手动配置 QPS 限流规则,比如设置单机 QPS 阈值为 1,然后连续刷新接口,就能看到部分请求返回“当前请求过多,请稍后重试”。
这一步的验证目标是:确认 Sentinel 能正常采集请求数据,并且流控规则真正生效。
9. 分布式事务:Seata 接入思路
9.1 Seata 在什么场景使用
微服务拆分后,一个业务操作可能涉及多个服务、多个数据库。比如创建订单时,先扣库存,再生订单,其中任何一步失败,都要保证数据一致。Seata 是 Spring Cloud Alibaba 体系中常用的分布式事务框架,支持 AT、TCC、SAGA 等模式。
9.2 最小接入步骤
Seata 的部署比前面几个组件要重一些,需要额外启动 TC(Transaction Coordinator)服务。使用 Docker 启动 Seata Server:
bash复制docker run --name seata-server \
-p 8091:8091 \
-e SEATA_IP=127.0.0.1 \
-e SEATA_PORT=8091 \
seataio/seata-server:latest
然后在业务服务中添加依赖:
xml复制<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-seata</artifactId>
</dependency>
在发起全局事务的方法上添加 @GlobalTransactional:
java复制@GlobalTransactional(name = "create-order-tx", rollbackFor = Exception.class)
public void createOrderWithTx() {
// 1. 调用库存服务扣减库存
// 2. 调用订单服务生成订单
}
同时需要在业务数据库中创建 Seata AT 模式的 undo_log 表。具体建表 SQL 在 Seata 官方文档中可以找到。
从实际实施角度来看,Seata 并不适合所有业务场景,尤其是强一致要求极高、并发特别大的场景,需要做压测后再决定是否使用。如果你的课程只是学微服务基础,可以先跳过 Seata,先把 Nacos、Feign、Gateway、Sentinel 这条链路摸熟,分布式事务放到第二期再做。
10. 接口 API 与批量任务验证思路
10.1 通过网关验证 API
微服务网关作为统一入口,最终对外暴露的 API 就是网关地址。用 curl 验证用户服务:
bash复制curl http://127.0.0.1:8080/api/user/1
返回:
json复制user-1
验证订单服务:
bash复制curl http://127.0.0.1:8080/api/order/create/100
返回:
json复制order created, user = user-100
如果返回正常,说明整个 API 链路从网关到服务注册、Feign 调用都是通的。
10.2 批量调用与压力测试思路
微服务接口稳定后,可以用脚本模拟批量请求,验证系统稳定性。比如循环调用用户查询接口 100 次:
bash复制for i in $(seq 1 100); do
curl -s "http://127.0.0.1:8080/api/user/$i" >> user_result.log
echo "" >> user_result.log
done
通过日志文件可以快速判断接口是否偶发超时或报错。在生产环境,批量任务通常不会直接用 for 循环调 HTTP,而是使用消息队列削峰填谷,或者在任务调度框架中调用服务接口。但本地的批量验证脚本足以观察基础稳定性。
10.3 异步与定时任务
如果在微服务架构中需要定时同步数据,推荐独立创建一个 job-service,而不是在业务服务内部写没有保护机制的定时线程。Spring Boot 本身支持 @Scheduled,但在集群环境下需要注意多个实例重复执行的问题。更稳妥的方式是接入分布式任务调度框架,比如 xxl-job,把任务集中管理和执行。课程中涉及的批量任务部分,其重点是传递“任务与业务服务分离”的思路。
11. 资源占用与性能观察
11.1 本地资源观察
微服务架构在本地开发时,资源消耗比单体应用明显更高。一个 Nacos、一个网关、两个业务服务,再加上 IDEA 本身,建议本机至少有 8G 内存。如果内存不足,优先减少同时启动的服务数量,或者把 Nacos 部署到远程环境。
观察服务资源,可以使用 JDK 自带命令:
bash复制jps -l
找到 Java 进程 PID 后,用 jstat 观察堆内存和 GC 情况:
bash复制jstat -gc <pid> 1000
另一个更直观的方法是打开终端 top 命令,查看每个 Java 进程的 CPU 和内存占用。没有统一的标准数值,具体占用取决于你的业务复杂度、JVM 参数和框架配置。
11.2 性能损耗在哪里
微服务链路每增加一个节点,响应时间都会增加一次网络开销:
- 请求到达网关,网关做路由转发。
- 网关通过 Nacos 服务发现找到实例。
- 业务服务之间通过 Feign 调用时,又会有一次 HTTP 请求。
- 如果每次调用都走配置中心动态刷新,也会增加额外 I/O。
因此,生产环境必须给服务之间调用设置合理的超时时间和重试策略,不能只是“能调通”就完事。例如 OpenFeign 可以配置连接超时和读取超时:
yaml复制feign:
client:
config:
default:
connectTimeout: 1000
readTimeout: 3000
网关路由同样需要设置超时。这个参数如果不调,默认值在极端情况下可能表现不稳,需要提前测试。
11.3 降低启动和内存占用的方法
如果本地机器配置不高,可以采取以下措施:
- 只启动当前链路必需的服务,先不启动 Seata 等重组件。
- Nacos 用单机模式,并调整 JVM 参数,减少堆内存。
- 关闭 IDEA 用不到的多余插件。
- 使用 Docker Compose 管理中间件,避免本机残留多个进程。
12. 常见问题与排查方法
| 问题现象 | 可能原因 | 排查方式 | 解决方案 |
|---|---|---|---|
| Nacos 启动后控制台打不开 | 端口被占用或启动模式不对 | 查看启动日志,检查 8848 端口 | 换端口或关闭占用进程 |
| 服务无法注册到 Nacos | server-addr 配置错误或网络不通 |
检查 Nacos 日志,telnet 8848 端口 | 确认地址、端口、防火墙 |
| 配置中心内容不生效 | 配置文件位置不对或缺少相关依赖 | 检查控制台输出和 Nacos 配置列表 | 确认 bootstrap.yml 配置或使用 spring.config.import |
| Feign 调用 404 | 接口路径不匹配 | 看 Feign 接口的路径和提供方 Controller 路径 | 修正 @FeignClient 的 path 或 @GetMapping 路径 |
| 网关路由不生效 | 路由断言错误或 StripPrefix 配置不对 | 访问网关接口看日志 | 调整 Path 规则和过滤器 |
| Sentinel 控制台没有实时数据 | 服务未初始化或版本不兼容 | 先访问业务接口,再刷新控制台 | 确认依赖和控制台版本匹配 |
| Seata 全局事务不生效 | TC 未启动或 undo_log 表缺失 | 查看 Seata 客户端日志 | 启动 seata-server,执行建表 SQL |
| 启动报版本兼容错误 | Spring Boot 与 Alibaba 版本不匹配 | 查看堆栈信息,确认依赖树 | 使用官方版本清单重新设置 |
排查这一类问题,最有效的方法不是猜,而是看日志。每个组件的启动日志和控制台日志里都会打印大致原因,先定位到具体模块,再缩小范围去查,比盲目改配置要快得多。
13. 最佳实践与学习建议
13.1 保持版本统一
Spring Cloud Alibaba 最大的坑就是版本兼容。不要在一个项目里手动混搭不同版本的 Nacos Client、Spring Cloud 和 Spring Boot。建议用父 POM 的 dependencyManagement 统一管理,升级时只改 BOM 版本,然后整体回归测试。
13.2 先跑通最小链路
第一次学习,不要直接套用生产架构。先把最小链路跑通:
text复制Nacos 注册中心
-> user-service 注册
-> order-service 注册并 Feign 调用 user-service
-> gateway-service 统一路由
-> Sentinel 对核心接口限流
这样一条链路跑通后,再根据实际业务逐步加 Seata、分布式任务、链路追踪等组件。
13.3 网关层做安全控制
生产环境不要把所有微服务端口直接暴露到公网。统一通过网关转发,在网关层做认证鉴权、白名单、限流和跨域处理。如果服务实例之间是内网调用,也要确保网络隔离,防止内部接口被非法访问。
13.4 配置和代码分开管理
配置中心里的内容要区分环境,例如 dev、test、prod。敏感数据不要明文放在 Nacos 中,可以使用 Nacos 的加密插件或引入外部密钥管理。本地示例用简单密码没问题,但上生产前必须整改。
13.5 注意版权和合规
如果你是通过课程学习这套技术栈,注意课程中的视频、代码、文档属于版权保护内容,不要进行二次传播或商业用途。自己动手搭建的工程,如果参考了课程代码,建议只保留学习用途。涉及开源组件时,也要遵守各自的开源协议。技术实践本身是为了提升能力,不应该触碰版权和合规红线。
13.6 逐步向生产看齐
当基础链路稳定后,可以继续扩展这些方向:
- 使用 Spring Cloud Sleuth 或 Micrometer Tracing 实现链路追踪。
- 接入 SkyWalking 或 Prometheus 做可观测性。
- 将服务打包成 Docker 镜像,部署到 K8s 集群。
- 使用 CI/CD 流水线做自动化构建和发布。
这些内容虽然不在本文范围内,但它们是微服务从“跑通”走向“可运维”的必经之路。
总结与下一步
从实际学习路径来看,Nacos、OpenFeign、Gateway、Sentinel 这四个组件是最值得先验证的。Nacos 负责服务注册和配置中心,OpenFeign 解决服务间调用,Gateway 统一入口,Sentinel 兜底高并发稳定性。把这四件事做完,你已经拥有一个可以继续扩展的微服务底座。
刚开始搭建时,最容易踩的坑是版本兼容和端口占用。不要看到教程里写什么版本就直接复制,先查一下自己本机 JDK 和 Spring Boot 版本,再去官方文档确认 Spring Cloud Alibaba 的匹配关系。遇到启动失败,优先看日志,不要反复重试同一个错误配置。
后面的方向可以按团队实际需要选择:如果业务强一致要求高,就研究 Seata;如果服务数量多、排查问题困难,就上链路追踪;如果部署环境需要弹性伸缩,就结合容器化推进。建议把本文的“最小链路”先在本地完整跑一遍,再决定下一步扩展什么。
