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

你可能听说过“微服务”这个词,它是一种现代软件架构方式,将一个大应用拆分成多个小的、独立的服务,每个服务都可以独立开发、部署和扩展。
而 Spring Cloud 就是 Java 生态中专门为构建微服务系统提供的一套工具集。它不是某个具体的技术,而是多个项目的集合,帮助开发者更方便地管理分布式系统中的各种问题。
比如:
- 多个服务怎么发现彼此?
- 如何统一配置多个服务?
- 如果某一个服务挂了怎么办?
这些问题 Spring Cloud 都提供了解决方案。
🎯 本教程目标:带着你一步步用 Spring Cloud 搭建一个最简单的微服务项目。
二、环境准备:搭建开发环境(超详细)

我们使用最主流的 Java 开发栈来完成本次教程。
所需工具清单:
| 工具 | 版本建议 |
|---|---|
| JDK | Java 17 或 Java 21 |
| Maven | 最新版本(3.8.x 以上) |
| IDE | IntelliJ IDEA 社区版(推荐)或 Eclipse |
| Spring Boot | 推荐使用 Spring Boot 3.x |
| Spring Cloud | 推荐使用 2022.0.x 系列 |
步骤 1:安装 JDK 并配置环境变量
- 前往 https://adoptium.net/ 下载对应系统的 JDK
- 安装完成后,在命令行输入:
java -version
输出类似下面内容说明安装成功:
openjdk version "17.0.6" 2023-01-17
步骤 2:安装 IntelliJ IDEA
前往官网下载社区版(免费):
👉 https://www.jetbrains.com/idea/download/
安装后启动,设置好 JDK 和 Maven 路径即可。
步骤 3:创建第一个 Spring Boot 项目
打开浏览器访问 👉 https://start.spring.io/
选择如下选项:
- Project: Maven
- Language: Java
- Spring Boot Version: 3.0.x(最新稳定版)
- Dependencies: Spring Web
点击 “Generate” 下载生成好的基础工程,解压后用 IDEA 打开即可。
✅ 小提示:确保
pom.xml中有<packaging>jar</packaging>,因为我们要用到内嵌服务器。
运行 main() 方法后,访问 http://localhost:8080,你会看到默认的 Spring Boot 启动页面 —— 表示你的环境准备好了!
三、核心概念通俗讲解

1. 微服务是什么?
你可以理解为:“一个大程序被切成了很多个小的独立小程序”,每个小程序负责一个功能模块。例如:
- 用户服务:专门处理用户注册、登录
- 商品服务:处理商品信息
- 订单服务:处理下单逻辑
好处是:可以分团队开发、单独部署升级、出错影响更小。
2. 注册中心 Eureka Server(服务管理中心)
想象一下公司里有一本通讯录,员工想找谁都要先查这个通讯录。
Eureka Server 就像是微服务里的通讯录,记录有哪些服务可用。
3. 客户端服务 Eureka Client(注册到通讯录的小服务)
每一个小服务都会告诉 Eureka Server 自己叫什么名字、在哪台机器上运行。
这样其他服务就可以通过通讯录找到它。
4. 负载均衡 Ribbon / LoadBalancer
Ribbon 是旧版本常用的负载均衡器,现在 Spring Cloud 通常搭配 LoadBalancer 使用,用于在多个服务实例之间进行轮询调用。
比如:有三个订单服务实例在跑,LoadBalancer 可以帮你随机选择一个去请求。
四、实战项目:手把手教你写一个简单微服务项目

我们将做一个最简单的例子:
- 一个注册中心 Eureka Server
- 两个客户端服务:用户服务 user-service 和订单服务 order-service
- 用户服务能调用订单服务获取数据
第一步:创建 Eureka Server(注册中心)
1. 新建 Maven 项目 spring-cloud-eureka-server
使用 Spring Initializr 创建一个项目,并添加以下依赖:
- Spring Web
- Eureka Server
修改 application.yml:
server:
port: 8761
eureka:
instance:
hostname: localhost
client:
registerWithEureka: false
fetchRegistry: false
serviceUrl:
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
然后在主类加上注解启用 Eureka 服务:
@EnableEurekaServer
@SpringBootApplication
public class EurekaServerApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaServerApplication.class, args);
}
}
运行主类后访问 http://localhost:8761,可以看到注册中心界面。
第二步:创建用户服务 user-service
同样新建 Spring Boot 项目,添加如下依赖:
- Spring Web
- Eureka Discovery Client
配置 application.yml:
spring:
application:
name: user-service
server:
port: 8081
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka/
启动类添加注解启用服务发现:
@EnableDiscoveryClient
@SpringBootApplication
public class UserServiceApplication {
public static void main(String[] args) {
SpringApplication.run(UserServiceApplication.class, args);
}
}
创建一个 Controller 测试服务:
@RestController
@RequestMapping("/user")
public class UserController {
@GetMapping("/hi")
public String sayHi() {
return "User Service is running!";
}
}
运行后刷新 Eureka 页面:你应该能看到 user-service 出现在已注册服务列表中。
第三步:创建订单服务 order-service
步骤与用户服务一致,只是改下名称和端口号:
application.yml:
spring:
application:
name: order-service
server:
port: 8082
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka/
Controller 示例:
@RestController
@RequestMapping("/order")
public class OrderController {
@GetMapping("/list")
public String getOrderList() {
return "Order list data here.";
}
}
启动后刷新 Eureka,应该能看到两个服务都在运行。
第四步:实现服务间调用(Feign + LoadBalancer)
我们要让用户服务去调用订单服务。
添加 Feign 客户端支持
在 user-service 的 pom.xml 中添加:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
启动类添加注解:
@EnableFeignClients
@EnableDiscoveryClient
@SpringBootApplication
public class UserServiceApplication { ... }
创建一个远程调用接口:
@FeignClient(name = "order-service")
public interface OrderClient {
@GetMapping("/order/list")
String getOrderList();
}
然后在 UserController 中使用它:
@Autowired
private OrderClient orderClient;
@GetMapping("/call-order")
public String callOrderService() {
return "Calling Order Service: " + orderClient.getOrderList();
}
运行 user-service,访问:
👉 http://localhost:8081/user/call-order
如果能看到返回 "Order list data here.",恭喜你完成了第一次微服务之间的通信!
五、常见问题解答(FAQ)
问题1:服务注册不上 Eureka?
✅ 解决方法:
- 检查 application.yml 是否正确配置了 eureka.client.serviceUrl.defaultZone
- 确保 Eureka Server 先启动
- 查看日志是否有连接失败错误
问题2:Feign 报错“UnknownHostException: order-service”
✅ 解决方法:
- 检查 order-service 是否确实注册到了 Eureka
- 检查是否漏掉了
@EnableDiscoveryClient - 检查 FeignClient 注解的 name 是否写对
问题3:Feign 不兼容 Spring Boot 3?
✅ 解决方法: Spring Boot 3 使用 Jakarta EE 包名变化,请确认使用 Spring Cloud 2022.0.x 及以上版本。
六、学习建议:下一步该学什么?
恭喜你完成了第一个 Spring Cloud 微服务项目!接下来你还可以尝试学习这些内容:
| 主题 | 内容简要 | 学习建议 |
|---|---|---|
| 配置中心 | Spring Cloud Config + Git | 学会集中管理所有微服务的配置文件 |
| 网关 | Spring Cloud Gateway | 统一入口管理,权限控制 |
| 限流熔断 | Resilience4j / Hystrix(已弃用) | 提高系统健壮性 |
| 分布式链路追踪 | Sleuth + Zipkin | 追踪请求在多个服务间的流转 |
| 日志聚合 | ELK(Elasticsearch+Logstash+Kibana) | 看清整个系统的日志全貌 |
🎯 推荐路线图:
Spring Boot → Spring Cloud 核心组件 → 微服务部署(Docker/Kubernetes)→ 实战完整系统
如果你已经能按照本教程完成实践部分,那么恭喜你,你已经跨过了 Spring Cloud 微服务的大门!继续加油,未来可期!🚀

评论 0