Spring Cloud从零开始:微服务入门指南
开篇:Spring Cloud 是什么?为什么我们要学习它?

如果你刚接触“微服务”这个概念,没关系。我们先来简单说一下:
微服务(Microservice) 就是将一个大的系统拆成多个小的服务,每个服务只做一件事,独立运行、独立部署。这种架构让大项目变得更灵活、更容易维护。
而 Spring Cloud 就是专门为这些微服务提供一套“工具包”的框架,帮助开发者更轻松地实现:
- 服务注册与发现
- 负载均衡
- 配置中心
- 网关路由
- 断路器保护等
🌟 类比:你可以把 Spring Cloud 想象成“搭建乐高积木的说明书和辅助工具”,而不是直接帮你搭好一个房子。你还是得自己动手拼装,但有了这套工具,事情变得容易多了。
环境准备:开始前需要安装哪些东西?

为了顺利跟着本教程操作,你需要在本地准备好以下开发环境:
✅ 1. Java 开发环境(JDK)
推荐使用 JDK 17 或更高版本。
- 下载地址:https://adoptium.net
- 安装完成后,在命令行输入:
java -version
输出类似如下即可:
openjdk version "17.0.3" 2022-04-19
✅ 2. Maven 构建工具
Spring Boot 和 Spring Cloud 项目通常使用 Maven 来管理依赖。
- 安装方式请参考 Maven官网
- 验证安装:
mvn --version
✅ 3. IntelliJ IDEA(或其他IDE)
IntelliJ IDEA 社区版完全免费,非常适合 Java 开发。当然,也可以使用 Eclipse、VS Code(配合插件)。
✅ 4. Node.js 和 Postman(可选)
Postman 用于测试接口很方便,Node.js 可以用来写一些简单的前后端示例。
核心概念:Spring Cloud 到底有哪些关键功能?
我们现在不需要一下子记住所有内容,只要有一个初步的印象就行。
| 功能模块 | 描述 | 工具类比 |
|---|---|---|
| Eureka(服务中心) | 所有服务都在这里注册自己,别的服务可以来找你 | 公司内部通讯录 |
| Ribbon / LoadBalancer(负载均衡) | 多个相同服务怎么选一个访问?它来帮忙选 | 前台分配客户到不同窗口 |
| Feign / OpenFeign(远程调用) | 让服务之间像调方法一样通信 | 直接打电话办事 |
| Gateway(网关) | 统一入口,控制请求流向哪个服务 | 公司的大门保安 |
| Config(配置中心) | 把各个服务的配置统一放在一个地方管理 | 云端记事本 |
| Sleuth & Zipkin(链路追踪) | 查看一个请求经过了哪些服务,耗时多久 | 记录快递运输路径 |
| Sentinel / Hystrix(熔断降级) | 服务挂了不能拖垮整个系统,要能“自我保护” | 出现故障自动报警 |
实战项目:从零创建两个微服务并实现通信

我们来做一个最基础的例子:创建一个商品服务和一个订单服务,让它们互相通信。
第一步:创建父工程(统一管理多个子服务)
新建一个空目录,比如叫 springcloud-demo,在这个目录下创建一个 pom.xml 文件:
<!-- springcloud-demo/pom.xml -->
<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>com.example</groupId>
<artifactId>springcloud-demo</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>pom</packaging>
<modules>
<module>product-service</module>
<module>order-service</module>
</modules>
</project>
这个父工程本身不写代码,只是用来管理下面两个子模块。
第二步:创建服务注册中心(Eureka Server)
1. 新建模块:eureka-server
创建目录 eureka-server 并添加如下 pom.xml:
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
2. 添加启动类:
// EurekaServerApplication.java
package com.example.eurekaserver;
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);
}
}
3. 添加配置文件 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 的管理页面。
第三步:创建商品服务(Product Service)
1. 新建模块 product-service,添加依赖:
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
</dependencies>
2. 创建启动类:
// ProductServiceApplication.java
package com.example.productservice;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
@SpringBootApplication
@EnableEurekaClient
public class ProductServiceApplication {
public static void main(String[] args) {
SpringApplication.run(ProductServiceApplication.class, args);
}
}
3. 添加控制器 ProductController:
@RestController
@RequestMapping("/products")
public class ProductController {
@GetMapping("/{id}")
public String getProduct(@PathVariable Long id) {
return "Product ID: " + id + ", Name: iPhone 15";
}
}
4. 配置 application.yml:
server:
port: 8081
spring:
application:
name: product-service
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka/
启动后,在浏览器访问:http://localhost:8081/products/123,返回:
Product ID: 123, Name: iPhone 15
同时刷新 Eureka 页面,你能看到产品服务已经注册成功!
第四步:创建订单服务(Order Service),并调用产品服务
1. 新建 order-service 模块,添加依赖:
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
</dependencies>
2. 启动类 OrderServiceApplication.java:
@SpringBootApplication
@EnableEurekaClient
@EnableFeignClients
public class OrderServiceApplication {
public static void main(String[] args) {
SpringApplication.run(OrderServiceApplication.class, args);
}
}
3. 创建远程调用接口 ProductClient:
@FeignClient(name = "product-service")
public interface ProductClient {
@GetMapping("/products/{id}")
String getProductById(@PathVariable("id") Long id);
}
4. 创建控制器 OrderController:
@RestController
@RequestMapping("/orders")
public class OrderController {
@Autowired
private ProductClient productClient;
@GetMapping("/{orderId}/product/{productId}")
public String getOrderDetail(
@PathVariable Long orderId,
@PathVariable Long productId) {
String productInfo = productClient.getProductById(productId);
return "Order ID: " + orderId + "\nProduct Info:\n" + productInfo;
}
}
5. 配置 application.yml:
server:
port: 8082
spring:
application:
name: order-service
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka/
启动后访问:
http://localhost:8082/orders/1/product/123
你应该看到类似输出:
Order ID: 1
Product Info:
Product ID: 123, Name: iPhone 15
🎉 恭喜!你已经完成了两个微服务之间的通信!
常见问题解答
❓Q1:我启动 Eureka 后看不到任何服务注册进来怎么办?
- 确保 Eureka 正确启动;
- 确保其他服务的
application.yml中配置了正确的 Eureka 地址; - 检查是否启用了
@EnableEurekaClient注解。
❓Q2:订单服务无法调用产品服务,提示“unknown host”?
可能原因:
- 服务未正确注册到 Eureka;
- FeignClient 中指定的服务名拼写错误;
- 缺少负载均衡客户端支持(如 LoadBalancer)。
解决方案:
- 加入依赖:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>
❓Q3:FeignClient 无法注入?
确保启动类加上了 @EnableFeignClients 注解,并确认 FeignClient 接口所在的包被扫描到了。
❓Q4:启动多个服务后端口冲突怎么办?
- 在各自的
application.yml中设置不同的 server.port; - 使用 IDE 分开运行不同模块;
- 使用命令行启动(推荐);
学习建议:下一步该学啥?

你现在已经掌握了一个基本的 Spring Cloud 微服务结构,并且实现了服务注册发现和远程调用。
接下来你可以继续探索以下几个方向:
| 主题 | 内容 | 推荐资源 |
|---|---|---|
| API 网关 | 用 Spring Cloud Gateway 统一管理请求入口 | 官方文档 + 视频教学 |
| 配置中心 | 使用 Config Server 集中管理配置 | GitHub 示例项目 |
| 链路追踪 | 用 Sleuth + Zipkin 追踪请求路径 | Spring Cloud 文档 |
| 熔断限流 | 使用 Sentinel 或 Hystrix 防止雪崩 | B站实战视频 |
| Docker 部署 | 学会用容器化部署你的微服务 | 《Docker — 从入门到实践》电子书 |
结语
微服务不是魔法,它是一套解决问题的方法论。通过今天的学习,你已经迈出了第一步:理解它的运作原理,并亲手搭建了第一个微服务应用!
继续保持练习,不断尝试新功能,你会发现 Spring Cloud 的强大之处远不止这些。
如果你喜欢这篇教程,欢迎转发或收藏,也欢迎留言交流学习心得 😊。
🎯 学习不怕慢,怕不动手。一起加油吧,未来的后端高手!

评论 0