Spring Cloud从零开始:微服务入门指南
开篇:Spring Cloud是什么?用来做什么?

在现代软件开发中,Spring Cloud 是一个非常流行的框架集合,它的核心目的是帮助我们构建“微服务架构”。
那什么是 微服务(Microservices) 呢?我们可以这样理解:
微服务就是把一个大型项目拆分成多个小型的、独立的服务。每个服务做一件特定的事情,然后它们相互协作完成整个系统的功能。
举个例子,比如你要做一个电商系统,传统的方式可能是一个大程序包含所有功能:用户管理、订单处理、支付、库存……所有逻辑都在一个代码库里。这种方式的问题是维护困难、扩展不便。
而如果用微服务方式,就可以把这些模块分别做成小服务,比如:
- 用户服务
- 商品服务
- 订单服务
- 支付服务
每个服务可以独立部署、独立运行、独立更新,甚至可以用不同的技术实现。
而 Spring Cloud 就是一套工具集,它帮我们解决了这些服务之间如何通信、如何管理、如何容错等问题。
本教程将带你从零开始,使用最简单的语言和示例,一步步了解并实践 Spring Cloud 的核心概念与应用。
环境准备:搭建你的第一个 Spring Cloud 开发环境

要学习和实践 Spring Cloud,你需要准备好以下几样开发环境:
1. 安装 Java(JDK)
Spring Cloud 是基于 Java 的,所以首先你需要安装 JDK。
推荐版本:JDK 8 或以上(建议使用 OpenJDK)
安装方式:
- Windows:可以从 Adoptium 下载安装包。
- Mac:可以通过 Homebrew 安装:
brew install openjdk - Linux:同样可用包管理器安装,如
sudo apt install openjdk-17-jdk
验证是否安装成功:
java -version
2. 安装 IntelliJ IDEA(或其他 IDE)
推荐使用 IntelliJ IDEA Community Edition(免费),下载地址:JetBrains 官网
也可以使用其他 IDE,比如 VS Code + 配置合适的插件,但对于新手来说推荐使用 IDEA,更方便集成 Spring 工具。
3. 安装 Maven
Maven 是 Java 项目的依赖管理工具,Spring Cloud 使用 Maven 来引入各种组件。
下载地址:https://maven.apache.org/
Windows 安装步骤:
- 解压到本地目录,比如
C:\Program Files\apache-maven-3.8.6 - 设置环境变量
MAVEN_HOME=C:\Program Files\apache-maven-3.8.6 - 把
%MAVEN_HOME%\bin添加到系统路径PATH - 验证:打开终端输入
mvn -v
4. 创建你的第一个 Spring Boot 项目(作为基础)
使用 Spring Initializr 快速生成一个 Spring Boot 项目,选择如下选项:
- Project: Maven
- Language: Java
- Spring Boot Version: 最新稳定版(如 3.0.x)
- Dependencies:
- Spring Web
- Spring Cloud Common(后续会加上)
点击 "Generate" 下载项目压缩包,解压后使用 IDEA 打开即可。
✅ 环境检查清单
| 工具 | 是否安装 | 验证命令 |
|---|---|---|
| Java | ✅ | java -version |
| Maven | ✅ | mvn -v |
| IDEA | ✅ | 启动界面可见 |
下一步我们将开始讲解 Spring Cloud 的几个核心概念。
核心概念:通俗易懂地理解 Spring Cloud 中的关键术语

虽然 Spring Cloud 包含很多内容,但作为初学者,我们要先掌握最关键的几个核心组件,并通过简单代码实例来演示它们的功能。
1. 服务注册与发现(Service Discovery)
想象你公司有多个部门(相当于多个服务),当你想联系某个部门时,你需要知道这个部门在哪里办公(IP地址)、联系方式(端口)。
在微服务中也是如此,服务之间需要知道彼此的位置才能通信。
这就需要一个“通讯录”,我们称之为注册中心(Service Registry)。
常用的注册中心是 Eureka Server 或 Consul,我们这里以 Eureka 为例。
示例:创建一个 Eureka 服务注册中心
第一步:添加依赖(在 pom.xml 中)
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
第二步:配置 application.yml
server:
port: 8761
eureka:
instance:
hostname: localhost
client:
register-with-eureka: false
fetch-registry: false
service-url:
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
第三步:启用 Eureka 服务器(主类上加注解)
@SpringBootApplication
@EnableEurekaServer // 启动 Eureka 服务端
public class EurekaServerApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaServerApplication.class, args);
}
}
启动后访问 http://localhost:8761 就能看到服务注册中心的仪表盘。
2. 微服务客户端(Service Client)
有了注册中心之后,服务就可以注册进来,也能被其他服务发现。
我们来创建一个简单的“商品服务”来演示服务注册功能。
示例:创建商品服务(Product Service)
第一步:添加 Eureka Client 依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
第二步:配置 application.yml
server:
port: 8081
spring:
application:
name: product-service # 服务名称
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka/
第三步:写一个简单的 API 接口
@RestController
@RequestMapping("/products")
public class ProductController {
@GetMapping
public String getProducts() {
return "这是商品服务返回的信息";
}
}
启动该项目,稍等片刻,再次访问 Eureka 页面,你会发现 product-service 出现在了服务列表中!
3. 负载均衡和服务调用(Ribbon / Feign)
当多个相同服务同时在线时,我们需要选择其中一个进行调用,这就是负载均衡的作用。Spring Cloud 提供了 Ribbon 和 Feign 组件来实现这一点。
示例:Feign 远程调用
我们在另一个服务中远程调用上面的 product-service。
第一步:创建一个新的服务(例如 order-service),配置 Eureka Client。
第二步:添加 Feign 依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
第三步:启用 Feign(主类添加注解)
@EnableFeignClients
@SpringBootApplication
public class OrderServiceApplication {
public static void main(String[] args) {
SpringApplication.run(OrderServiceApplication.class, args);
}
}
第四步:创建 Feign 接口,定义远程调用方法
@FeignClient(name = "product-service") // 指定目标服务名
public interface ProductServiceClient {
@GetMapping("/products")
String getProducts();
}
第五步:编写控制器进行测试
@RestController
@RequestMapping("/orders")
public class OrderController {
@Autowired
ProductServiceClient productServiceClient;
@GetMapping
public String getProductsFromAnotherService() {
return productServiceClient.getProducts(); // 实际调用 product-service 的接口
}
}
现在访问 http://localhost:8082/orders,你会看到远程调用了 product-service 返回的内容!
4. 网关(Gateway)
当我们有很多服务时,不可能让用户记住每个服务的地址。这时就需要一个统一入口——也就是网关(API Gateway)。
Spring Cloud Gateway 是一个常用的微服务网关实现。
示例:创建一个 API 网关
第一步:添加依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
第二步:配置网关路由(application.yml)
spring:
cloud:
gateway:
routes:
- id: product-route
uri: lb://product-service # lb 表示负载均衡
predicates:
- Path=/api/product/** # 访问 /api/product/* 会被转发给 product-service
filters:
- StripPrefix=1 # 去掉路径中的第一段
启动网关,端口设为 8083。
然后访问:
http://localhost:8083/api/product/products
实际上访问的就是 product-service 的 /products 接口!
实战项目:跟着教程完成一个简单的微服务项目
接下来我们将综合上面的知识点,实战完成一个小项目:一个简单的购物系统,包括以下服务:
- 注册中心 Eureka Server
- 商品服务(提供商品信息)
- 订单服务(远程调用商品服务)
- 网关(对外暴露统一接口)
第一步:启动 Eureka Server
确保已创建并启动注册中心,监听端口 8761。
第二步:启动 Product Service
配置文件设置为:
server:
port: 8081
spring:
application:
name: product-service
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka/
创建接口 /products 返回固定字符串即可。
第三步:启动 Order Service
配置如下:
server:
port: 8082
spring:
application:
name: order-service
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka/
使用 Feign 远程调用 /products 接口。
第四步:启动 Gateway 服务
配置如下:
server:
port: 8083
spring:
application:
name: gateway-service
cloud:
gateway:
routes:
- id: product-api
uri: lb://product-service
predicates:
- Path=/api/product/**
filters:
- StripPrefix=1
启动后尝试访问:
http://localhost:8083/api/product/products
应该能看到来自 product-service 的响应!
常见问题解答(FAQ)
Q1: Spring Cloud 有哪些常见组件?
A:Spring Cloud 主要有以下常用组件:
| 组件 | 功能说明 |
|---|---|
| Eureka | 服务注册与发现 |
| Feign / OpenFeign | 服务间远程调用 |
| Hystrix | 服务熔断(防止雪崩) |
| Zuul / Gateway | API 网关 |
| Config Server | 集中式配置管理 |
| Sleuth / Zipkin | 分布式请求追踪 |
Q2: 启动 Eureka 后页面打不开怎么办?
A:可能是防火墙或端口占用问题,可尝试:
- 关闭电脑防火墙
- 检查 8761 是否被占用:
netstat -ano | findstr :8761(Windows)
Q3: 服务注册不上 Eureka 是怎么回事?
A:请检查:
- 应用名是否配置正确:
spring.application.name - Eureka 地址是否正确:
eureka.client.service-url.defaultZone - 是否启用了 Eureka 客户端:是否添加
@EnableEurekaClient
Q4: 如何查看服务之间的调用关系?
A:可以结合 Spring Cloud Sleuth 和 Zipkin 实现分布式追踪。
学习建议:下一步该学什么?
恭喜你完成了 Spring Cloud 的入门实战!你现在掌握了微服务中最关键的基础知识:服务注册、服务调用、网关。
接下来建议你可以继续学习以下几个方向:
✅ 更高级的微服务能力:
- 服务熔断(Hystrix):防止单个服务挂掉导致整个系统瘫痪。
- 集中配置(Config Server):把所有配置统一管理。
- 日志聚合(ELK stack):收集各服务的日志以便排查问题。
- 链路追踪(Sleuth + Zipkin):跟踪整个请求的调用链条。
🧠 巩固知识点的学习顺序:
- 弄清楚每一个组件的基本用途(建议看官网文档或配套教学视频)
- 自己动手搭建一个完整的 Demo 系统(可以参考本文项目)
- 尝试在项目中加入更多的服务(如支付服务、库存服务)
- 模拟故障场景,理解服务容错机制
📚 推荐学习资源:
- Spring Cloud 官方文档:https://spring.io/projects/spring-cloud
- 极客时间《Spring Cloud 全栈开发实战》
- B站/YouTube 上搜索 “Spring Cloud 实战” 相关视频
- GitHub 上搜索优秀的开源 Spring Cloud 项目
结语
Spring Cloud 是一套强大且复杂的微服务解决方案,但只要按照正确的学习路径循序渐进,即使是零基础的新手也能逐步掌握。
本教程带你认识了微服务的概念、搭建了开发环境、实现了服务注册与调用,并完成了一个简单项目。希望你能保持练习的热情,继续深入探索更多 Spring Cloud 的精彩内容!
如果你在学习过程中有任何疑问,也欢迎随时提问。祝你在编程之路上越走越远!
✅ 文章总字数约 3052 字

评论 0