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

你有没有想过,像淘宝、京东、美团这样的大型网站是如何做到每天支持几亿人同时使用的?它们的背后其实并不是一个巨大的“超级程序”,而是由成百上千个小型的“子系统”协作完成的。这些小系统各自负责不同的功能,比如用户登录、商品展示、订单处理等等,这种开发方式就叫做微服务架构(Microservices Architecture)。
而 Spring Cloud 就是帮助我们轻松搭建和管理这些“小系统”的工具集。它基于另一个非常流行的 Java 框架 —— Spring Boot,在它的基础上增加了对微服务之间通讯、配置管理、负载均衡等功能的支持。简单来说,Spring Cloud 的作用就是让我们能更方便地开发、维护和协调这些独立运行的小服务。
如果你是个刚接触编程的新手,可能听到这些术语会觉得有点晕。没关系,接下来我们会一步步来讲解,让你明白到底怎么用 Spring Cloud 来开发微服务!
环境准备:准备好你的开发工具

Step 1:安装 Java 开发环境
因为我们要使用 Java 编写代码,所以首先要安装 Java 开发工具包(JDK)。推荐使用 Oracle JDK 或 OpenJDK,版本选择 Java 17 或以上即可。
- 下载 OpenJDK(免费)
- 安装完成后,在命令行中输入以下命令验证:
java -version
如果看到类似下面的信息,说明安装成功了:
openjdk version "17.0.9" 2023-10-17
OpenJDK Runtime Environment (build 17.0.9+11)
OpenJDK 64-Bit Server VM (build 17.0.9+11, mixed mode)
Step 2:安装 IntelliJ IDEA
我们可以使用 IntelliJ IDEA 社区版(免费),这是一款非常强大的 Java 开发工具。
- 下载地址:JetBrains官网
- 安装完成后打开它,我们就可以用来编写 Spring Cloud 项目啦!
Step 3:安装 Spring Initializr 插件(可选)
在 IntelliJ IDEA 中可以集成 Spring 的在线项目创建工具 —— Spring Initializr,它可以帮我们快速生成基础项目结构。如果你不熟悉这个插件也没关系,后面我们会教你一步一步创建 Spring Cloud 项目。
核心概念介绍:微服务里那些听起来高大上的词到底是什么意思?

虽然 Spring Cloud 功能强大,但刚开始学的时候不需要一次性记住所有东西。我们先理解几个最关键的概念,后面的实战中再具体体验。
1. 微服务(Microservice)
你可以把它想象成一个个功能模块,比如说“用户管理”、“商品详情页”、“购物车”等都可能是单独的一个微服务。它们各自独立运行,互不干扰。
举个例子:
假设你正在做一个商城项目,其中有一个服务专门负责用户注册和登录(称为 user-service),另一个专门处理商品信息(称为 product-service)。这就是两个独立的微服务。
2. 注册中心(Service Discovery)
既然多个服务要协作工作,那问题来了:每个服务怎么知道其他服务在哪里运行?这个时候就需要一个中央管理员来帮忙记录和查询服务的位置。这个管理员就是一个叫 Eureka Server 的组件(也可以是 Consul、Zookeeper 等其他工具)。
👉 类比一下:你进了一个大图书馆找书,没有地图怎么办?这时候你就去找图书管理员,他帮你查哪本书放在哪个架子上,这样你就能找到书了。
3. 负载均衡(Load Balancer)
有时候一个服务可能会有多个实例同时运行,比如有三个一模一样的商品服务在运行。当用户请求进来时,我们需要把请求平均分给这三个实例。这时就会用到一个叫 Ribbon 或者 Spring Cloud LoadBalancer 的工具,它会帮你决定把请求送给哪一个服务。
4. 配置中心(Config Server)
在多个服务之间共享一些配置信息(比如数据库密码、接口前缀等)是一件很麻烦的事。配置中心(如 Spring Cloud Config Server)可以帮助你把这些配置统一管理,让各个服务按需获取。
实战项目:跟着我一步步创建第一个微服务项目吧!
我们这次要做的项目是一个简单的“电商服务”演示,包含两个服务:
- user-service:负责用户注册和基本信息。
- product-service:展示商品信息。
最终目标:这两个服务能够互相访问,通过注册中心自动发现彼此,实现最基本的通信功能。
第一步:创建父项目(Spring Boot 项目)
- 打开 start.spring.io
- 填写如下信息:
- Project: Maven
- Language: Java
- Spring Boot Version: 最新稳定版(比如 3.2.x)
- Group: com.example
- Artifact: springcloud-demo
- Name: springcloud-demo
- Packaging: Jar
- Java: 17
Dependencies:
- Spring Web(用于构建 Web 服务)
- Lombok(简化 POJO 编写)
点击 Generate 下载并解压。
导入到 IntelliJ IDEA。
第二步:添加依赖,启用 Spring Cloud 支持
我们需要为微服务添加必要的 Spring Cloud 组件支持,比如 Eureka Client(服务注册客户端)、OpenFeign(服务间调用客户端)等。
修改 pom.xml 文件:
<!-- 添加 Spring Cloud 依赖 -->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>2023.0.0</version> <!-- 对应 Spring Boot 版本 -->
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<!-- 在 modules 下添加子项目(后面会创建) -->
<modules>
<module>eureka-server</module>
<module>user-service</module>
<module>product-service</module>
</modules>
第三步:创建注册中心(eureka-server)
- 创建名为
eureka-server的子项目(Maven Module)。 - 在
pom.xml中添加以下依赖:
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
</dependencies>
- 修改配置文件
src/main/resources/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/
- 修改启动类:
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);
}
}
现在启动这个项目,访问 http://localhost:8761,你会看到 Eureka 的仪表盘页面!
第四步:创建 user-service 并注册到注册中心
- 新建模块
user-service。 - 添加依赖(在
pom.xml):
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
</dependencies>
- 配置文件
application.yml内容如下:
server:
port: 8081
spring:
application:
name: user-service
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka/
- 启动类加上注解:
@SpringBootApplication
@EnableEurekaClient
public class UserServiceApplication {
public static void main(String[] args) {
SpringApplication.run(UserServiceApplication.class, args);
}
}
- 写一个测试 Controller:
@RestController
@RequestMapping("/users")
public class UserController {
@GetMapping("/{id}")
public String getUser(@PathVariable Long id) {
return "User with ID: " + id;
}
}
启动后,在浏览器访问 http://localhost:8081/users/1001,可以看到输出结果!
并且刷新 Eureka 页面:你应该能在注册中心看到 user-service 已经注册成功了!
第五步:创建 product-service,并调用 user-service
- 新建模块
product-service。 - 加入同样的 Eureka 客户端依赖,并设置端口为 8082,名字为
product-service。 - 使用 Feign 客户端调用
user-service,添加以下依赖:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
- 启动类加注解:
@SpringBootApplication
@EnableEurekaClient
@EnableFeignClients
public class ProductServiceApplication {
public static void main(String[] args) {
SpringApplication.run(ProductServiceApplication.class, args);
}
}
- 创建 Feign 客户端接口:
@FeignClient(name = "user-service")
public interface UserFeignClient {
@GetMapping("/users/{id}")
String getUserById(@PathVariable("id") Long id);
}
- 写一个调用控制器:
@RestController
@RequestMapping("/products")
public class ProductController {
private final UserFeignClient userClient;
public ProductController(UserFeignClient userClient) {
this.userClient = userClient;
}
@GetMapping("/{userId}")
public String getProductWithUser(@PathVariable Long userId) {
return "Product for user: " + userClient.getUserById(userId);
}
}
现在访问 http://localhost:8082/products/1001,你会发现它已经能自动调用 user-service 返回数据了!
🎉 这说明两个微服务已经可以通过注册中心互相发现了!
常见问题解答
1. 我的注册中心启动不了怎么办?
检查端口是否被占用,默认是 8761。尝试修改 application.yml 中的 server.port。
2. 调用服务时报错 “UnknownHostException”
可能是服务还没有注册成功。请确保服务启动后等待几秒再尝试调用,或者手动刷新 Eureka 页面确认服务已上线。
3. Feign 调用失败?
确保开启了 @EnableFeignClients,并且 Feign 接口中的 name 属性与服务名称完全一致。
4. 服务启动报错 "No instances available for service"
表示 Eureka 没有找到对应的服务实例,检查服务名称拼写是否正确、是否注册成功。
学习建议:下一步该学啥?
完成了上面的入门项目之后,恭喜你迈出了第一步!接下来你可以继续学习以下内容来提升技能:
| 推荐学习方向 | 说明 |
|---|---|
| API 网关(Gateway) | 如何集中处理请求,实现权限控制、限流等功能 |
| 分布式配置(Config Server) | 让多个服务共享配置,避免重复配置 |
| 服务熔断与降级(Hystrix / Resilience4j) | 提升系统稳定性,防止雪崩效应 |
| 消息队列(RabbitMQ/Kafka) | 解耦服务之间的调用逻辑,提高响应速度 |
| 日志聚合(Sleuth + Zipkin) | 跟踪整个系统的调用链,排查错误 |
这些技术都是现代微服务开发中必不可少的部分。不要怕难度大,只要按照教程一步步动手做,都能掌握。
结语:别怕难,坚持做下去!
刚开始接触 Spring Cloud 的时候,很多术语听上去都很高级,也容易让人产生畏难情绪。但是只要你愿意动手写代码,一步一步去实践,你会发现这些工具其实是很好用的。就像搭积木一样,每个模块看起来都很简单,但一旦连在一起,就能组合出非常强大的应用。
希望这篇教程能成为你学习 Spring Cloud 的好起点,加油!🌟
文章总字数约:3932 字。

评论 0