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

如果你是刚接触后端开发的初学者,可能会觉得“微服务”、“Spring Cloud”这些词听起来特别高大上。其实它们就是为了解决一个实际问题而诞生的工具和架构思想。
简单来说,Spring Cloud 是一组工具包,它基于 Spring Boot,帮助我们更容易地构建和管理分布式系统(也就是常说的微服务架构)。
那么微服务到底是什么?
传统的项目可能是一个大的系统,比如一个电商网站,订单、商品、库存、用户等功能都写在一个项目里。这种结构叫做“单体架构”,适合小项目,但随着系统越来越复杂,修改一个小功能可能都要重启整个系统,风险很高。
于是就有了“微服务架构”。它的核心思想是:将一个复杂的系统拆分成多个独立的小服务,每个服务单独运行、部署、维护。例如:
- 用户服务
- 商品服务
- 订单服务
- 库存服务
这些服务之间通过网络通信协调工作,就像一支足球队里的不同位置球员各司其职一样。
而 Spring Cloud 提供了像服务注册与发现、配置中心、负载均衡、断路器等一系列组件来帮你更轻松地搭建和管理这些服务。
环境准备:快速搭建开发环境

为了跟着本教程实践,你需要准备以下几个工具:
1. JDK 1.8 或以上版本
Spring Boot 和 Spring Cloud 推荐使用 Java 11 或 Java 17。
下载地址:https://www.oracle.com/java/technologies/javase-downloads.html
验证命令:
java -version
2. Maven 构建工具
Maven 是 Java 项目依赖管理工具。下载地址:https://maven.apache.org/download.cgi
安装完成后检查版本:
mvn -v
3. IDE 开发工具
推荐使用 IntelliJ IDEA 或 Eclipse。新手建议使用 IDEA 社区版即可。
官网下载地址:
4. 创建父工程(Maven 多模块项目)
创建一个空文件夹,命名为 spring-cloud-demo,进入该目录,创建一个 pom.xml 文件:
<!-- spring-cloud-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>spring-cloud-demo</artifactId>
<version>1.0-SNAPSHOT</version>
<modules>
<module>eureka-server</module>
<module>product-service</module>
</modules>
<packaging>pom</packaging>
<properties>
<spring.boot.version>2.7.5</spring.boot.version>
<spring.cloud.version>2021.0.4</spring.cloud.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring.boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring.cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
</project>
接下来我们就可以开始创建具体的服务模块了!
核心概念:微服务的关键术语解释

在真正动手之前,先理解几个关键概念:
1. Eureka Server(服务注册中心)
你可以把它想象成“企业黄页”:当服务启动时,会去告诉 Eureka:“我上线了,我的名字叫 product-service,运行在 localhost:8080”。
其他服务如果想找它合作,就去查这个“黄页”。
2. 服务提供者(Provider)
就是那些提供业务功能的小服务,例如商品服务(Product Service)、订单服务(Order Service)。
3. 服务消费者(Consumer)
有的服务需要调用别人的服务才能完成自己的任务。例如,订单服务可能要找商品服务查询价格。
4. 负载均衡(Load Balancer)
如果有两个一模一样的商品服务同时运行,消费者应该访问哪一个?负载均衡就是解决这个问题的工具,它自动选择一个可用的服务实例。
实战项目:构建你的第一个微服务系统
我们将构建这样一个简单的系统:
- 搭建一个 Eureka 注册中心
- 构建一个商品服务(Product Service),注册到 Eureka 中
- 构建一个订单服务(Order Service),能访问商品服务获取商品信息(本节只实现产品服务)
第一步:创建 Eureka Server 服务
1. 创建 eureka-server 子模块
在父工程根目录下创建子目录 eureka-server,并在其中创建 pom.xml:
<!-- eureka-server/pom.xml -->
<project>
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.example</groupId>
<artifactId>spring-cloud-demo</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<artifactId>eureka-server</artifactId>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
</dependencies>
</project>
2. 创建主启动类
创建目录结构:src/main/java/com/example/eurekaserver
新建文件 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 // 启用Eureka服务
public class EurekaServerApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaServerApplication.class, args);
}
}
3. 配置 application.yml
在 src/main/resources 下创建 application.yml:
server:
port: 8761
eureka:
instance:
hostname: localhost
client:
registerWithEureka: false # 不注册自己
fetchRegistry: false # 不拉取服务信息
4. 启动测试
运行 EurekaServerApplication,然后打开浏览器访问:http://localhost:8761
你应该能看到 Eureka 的控制台界面。
✅ 到这里,注册中心已经搭建好了!
第二步:创建 Product 服务(服务提供者)
1. 创建 product-service 模块
在父工程中新增模块 product-service,创建 pom.xml:
<!-- product-service/pom.xml -->
<project>
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.example</groupId>
<artifactId>spring-cloud-demo</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<artifactId>product-service</artifactId>
<dependencies>
<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>
</dependency>
</dependencies>
</project>
2. 编写启动类
创建目录结构:src/main/java/com/example/productservice
新建 ProductServiceApplication.java:
package com.example.productservice;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
@SpringBootApplication
@EnableDiscoveryClient // 启用服务注册
public class ProductServiceApplication {
public static void main(String[] args) {
SpringApplication.run(ProductServiceApplication.class, args);
}
}
3. 添加 Controller 接口
新建 ProductController.java:
package com.example.productservice.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class ProductController {
@GetMapping("/products")
public String getProducts() {
return "[{'id':1, 'name':'iPhone', 'price':9999}, {'id':2, 'name':'MacBook Pro', 'price':12999}]";
}
}
4. 配置 application.yml
server:
port: 8080
spring:
application:
name: product-service
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka/
5. 启动并验证
运行 ProductServiceApplication,等待几秒钟后刷新 Eureka 页面:http://localhost:8761
你应该能看到 PRODUCT-SERVICE 出现在 "Instances currently registered with Eureka" 里面。
然后访问接口:http://localhost:8080/products
你会看到返回的 JSON 数据。
🎉 到目前为止,你已经成功创建了一个可以注册到 Eureka 的微服务!
常见问题:新手容易遇到的问题
问题1:Eureka 启动失败,报错 Unable to start embedded Tomcat
可能原因:
- JDK 版本不兼容(请使用 Java 11+)
- 端口冲突(确保 8761 没有被占用)
问题2:服务没有注册到 Eureka 上
排查步骤:
- 查看 Eureka 地址是否正确:
http://localhost:8761/eureka/ - 检查日志是否有连接超时等错误
- 是否启用了
@EnableDiscoveryClient注解
问题3:依赖项找不到,Maven 报错
解决方案:
- 检查 Maven 配置是否正确(setting.xml)
- 尝试手动删除本地仓库缓存目录后重装依赖
学习建议:下一步学什么?
恭喜你完成了 Spring Cloud 微服务的第一个小小项目!但这只是一个起点。接下来你可以继续学习以下内容:
1. 更多 Spring Cloud 组件
- Ribbon:客户端负载均衡
- Feign:声明式 REST 客户端
- Gateway / Zuul:API 网关
- Config:集中配置管理
- Sleuth + Zipkin:分布式链路追踪
2. 微服务设计思想
- 单一职责原则
- 服务容错设计(Hystrix)
- 分布式事务解决方案(如 Seata)
- 最终一致性 vs 强一致性
3. 持续集成与自动化部署
- Jenkins / GitLab CI 自动化部署
- Docker 容器化打包
- Kubernetes 容器编排
总结
通过这篇教程,你已经学会:
- 什么是 Spring Cloud 和微服务架构
- 如何搭建 Eureka 服务注册中心
- 如何创建并注册一个产品服务
- 一些常见问题的排查方法
别忘了:编程最重要的是动手练习。你可以试着自己扩展一下这个项目,例如:
- 加入一个订单服务,并让它调用产品服务获取数据
- 使用 Feign 替代 RestTemplate 进行服务间通信
- 增加 API 网关路由访问
继续坚持下去,你会发现自己也能做出很厉害的项目!
🎯 记住一句话:微服务不是魔法,是你努力掌握的一套技能。

评论 0