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

你可能听说过“微服务”这个词,但不知道它到底是什么。没关系,我们来打个比方。
想象一下你在开一家大公司,最初只有一个部门,所有事情都由这个部门处理,随着业务变多,人手不够,效率下降。于是你决定把公司拆分成几个独立的部门,每个部门只负责一部分工作,比如销售、客服、财务。这种做法在软件开发中就叫做“微服务”。
Spring Cloud 就是一个用来构建和管理这些“微服务”的工具集。它帮助我们在多个服务之间进行通信、配置管理、负载均衡、服务注册与发现等操作,让开发者更容易地搭建分布式的系统。
在这篇教程中,我们将从零开始,一步步带你体验 Spring Cloud 的基本功能,并完成一个简单的项目,帮助你迈出微服务开发的第一步!
环境准备:开发环境搭建步骤

学习任何编程技术,首先都需要搭建好开发环境。不用担心,我们会用最简单的方式一步一步来。
所需工具清单:
| 工具名称 | 用途说明 |
|---|---|
| Java JDK 17 | Spring Boot 要求的基础运行环境 |
| IntelliJ IDEA(或 VS Code) | 编写代码的开发工具 |
| Maven | 管理依赖和构建项目的工具 |
| Spring Boot | Spring Cloud 的基础框架 |
| Postman 或 curl | 测试 API 请求 |
| Git(可选) | 版本控制 |
步骤一:安装Java环境
前往官网 https://www.oracle.com/java/technologies/downloads/ 下载 JDK 17 并安装。
验证是否安装成功,打开命令行输入:
java -version
你应该能看到类似下面的输出:
openjdk version "17.0.8" 2023-07-18
步骤二:下载并安装IDEA
推荐使用 IntelliJ IDEA Community Edition(社区版),免费且功能强大。
下载地址:https://www.jetbrains.com/idea/download/
安装完成后,启动它。
步骤三:安装Maven
如果你使用的是 Windows,可以使用 Scoop 安装:
scoop install maven
如果是 Mac/Linux,可以通过包管理器安装:
brew install maven # macOS
sudo apt-get install maven # Ubuntu
验证是否安装成功:
mvn -v
如果显示版本号,说明安装成功。
好了,现在你的环境已经准备好了!接下来是重点内容啦。
核心概念:通俗易懂地解释关键术语

在正式动手之前,我们先了解一些核心概念,确保你知道你在写什么代码 😄。
1. 什么是微服务?
微服务是一种架构风格,不是具体的某个技术。它的特点是:
- 每个服务是独立的
- 可以使用不同的语言开发
- 各自部署、各自运行
- 通过网络相互通信(一般是 HTTP)
2. Spring Boot 是什么?
Spring Boot 是 Spring 的升级版,它简化了传统 Spring 项目复杂的配置过程,让我们快速搭建 Web 应用程序。你可以把它看作是搭建网站的一个快捷方式。
3. Spring Cloud 是什么?
Spring Cloud 是建立在 Spring Boot 基础上的,用于解决分布式系统中的各种问题。主要包括:
| 功能 | 对应组件 | 作用 |
|---|---|---|
| 服务发现 | Eureka Server | 让服务找到彼此 |
| 配置中心 | Config Server | 管理全局配置 |
| 负载均衡 | Ribbon / LoadBalancer | 多实例请求分发 |
| API网关 | Gateway / Zuul | 统一入口 |
| 断路器(熔断) | Hystrix | 故障隔离,避免雪崩 |
别急着记全,我们将在实战中逐个使用这些组件。
实战项目:从零创建一个简单的微服务系统

我们来做一个小项目练练手吧!这个项目包括两个部分:
- 一个用户服务(UserService)
- 一个订单服务(OrderService)
- 一个注册中心(Eureka Server)
目标是实现订单服务调用用户服务的数据。
第一步:创建父工程
我们先创建一个 Maven 父项目,管理多个子模块。
在IDEA中新建Maven项目:
- File → New → Project → Maven
- GroupId 填
com.example,ArtifactId 填springcloud-demo - 删除
src文件夹(因为这是父工程)
pom.xml 内容如下:
<project ...>
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>springcloud-demo</artifactId>
<version>1.0-SNAPSHOT</version>
<modules>
<module>eureka-server</module>
<module>user-service</module>
<module>order-service</module>
</modules>
<packaging>pom</packaging>
</project>
第二步:创建Eureka注册中心

Eureka 是 Spring Cloud 提供的服务注册与发现组件。所有服务都要先向它“报到”,别的服务才能找到它。
新建模块 eureka-server:
右键项目 → New → Module → Maven module → artifactId: eureka-server
修改其 pom.xml:
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
<version>3.1.0</version>
</dependency>
</dependencies>
然后添加主类 EurekaServerApplication.java:
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
@SpringBootApplication
@EnableEurekaServer
public class EurekaServerApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaServerApplication.class, args);
}
}
创建 application.yml:
server:
port: 8761
eureka:
instance:
hostname: localhost
client:
registerWithEureka: false
fetchRegistry: false
serviceUrl:
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
启动项目后访问 http://localhost:8761,看到Eureka界面表示成功!
第三步:创建用户服务 UserService
新建模块 user-service
修改 pom.xml:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
<version>3.1.0</version>
</dependency>

主类 UserServiceApplication.java:
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
@SpringBootApplication
@EnableEurekaClient
public class UserServiceApplication {
public static void main(String[] args) {
SpringApplication.run(UserServiceApplication.class, args);
}
}
创建 controller 层 UserController.java:
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/users")
public class UserController {
@GetMapping("/{id}")
public String getUser(@PathVariable String id) {
return "User ID: " + id + ", Name: Alice";
}
}
配置文件 application.yml:
server:
port: 8081
spring:
application:
name: user-service
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka/
启动项目,刷新Eureka界面,会看到一个名为 USER-SERVICE 的服务上线了 ✅
第四步:创建订单服务 OrderService
新建模块 order-service,结构与 user-service 类似。
pom.xml:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
<version>3.1.0</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
<version>3.1.0</version>
</dependency>
Feign 是用于远程调用其他服务的客户端库。
创建主类 OrderServiceApplication.java:
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.cloud.openfeign.EnableFeignClients;
@SpringBootApplication
@EnableEurekaClient
@EnableFeignClients
public class OrderServiceApplication {
public static void main(String[] args) {
SpringApplication.run(OrderServiceApplication.class, args);
}
}
创建 Feign 接口 UserServiceClient.java:
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 UserServiceClient {
@GetMapping("/users/{id}")
String getUserById(@PathVariable String id);
}
创建 controller 类 OrderController.java:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/orders")
public class OrderController {
@Autowired
private UserServiceClient userServiceClient;
@GetMapping("/{userId}")
public String getOrder(@PathVariable String userId) {
String userInfo = userServiceClient.getUserById(userId);
return "Order for user: " + userInfo;
}
}
最后,配置 application.yml:
server:
port: 8082
spring:
application:
name: order-service
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka/
启动 order-service,访问:
http://localhost:8082/orders/123
你会看到输出:
Order for user: User ID: 123, Name: Alice
🎉 恭喜!你已经完成了第一个微服务间的通信!
常见问题:新手容易踩的坑及解决方案
Q1:服务启动后无法在 Eureka 上注册?
- 检查 Eureka 是否正常启动
- 查看服务端口是否冲突
- 检查
application.yml中的配置是否正确(尤其是 Eureka 地址) - 查看控制台日志是否有错误信息
Q2:Feign 调用时报错 UnknownHostException?
- 检查服务名是否写对(例如
user-service) - 确保服务已注册到 Eureka(延迟 1~2 分钟是正常的)
- 确保 Eureka 已经在主类上加了
@EnableEurekaClient
Q3:多个服务跑在同一个电脑没问题吗?
完全没问题,本地测试时通常会用不同端口区分服务。生产环境中才会考虑部署到不同机器。
Q4:为什么 Feign 和 Eureka 要配这么多东西?
Spring Cloud 的设计初衷就是自动化和服务治理,一开始可能会有些复杂,但理解之后你会发现它非常强大。
学习建议:下一步怎么学?
恭喜你完成了 Spring Cloud 的第一个完整实践!下一步可以尝试:
- 深入了解配置中心(Config Server)
- 学习API网关(Gateway)统一请求入口
- 掌握分布式事务(如Seata)
- 加入监控系统(如Prometheus + Grafana)
- 尝试部署到 Docker / Kubernetes
也可以看看官方文档和开源项目加深理解:
- 官方文档:https://spring.io/projects/spring-cloud
- GitHub 示例:搜索
spring cloud example
坚持敲代码,不懂的地方多调试,多问问题,相信你也能成为微服务高手!
总结
在这篇教程中,我们做了以下几件事:
✅ 了解了什么是 Spring Cloud
✅ 搭建了开发环境
✅ 学习了几个核心概念
✅ 创建了一个包含多个服务的微服务项目
✅ 解决了一些常见问题
✅ 给出了继续深入的学习建议
不要怕难,每一个高手都是从“Hello World”开始的。只要你肯动手练习,持续积累经验,微服务的大门就为你敞开!
Happy coding 🚀

评论 0