Spring Cloud从零开始:微服务入门指南
大家好,我是你们的老朋友,一个在大厂干了3年后端开发、业余时间在B站做技术UP主的程序员。最近很多粉丝私信我:“能不能出一期真正面向零基础小白的Spring Cloud教程?”说实话,我当初学的时候也是一头雾水——各种术语、配置、服务注册发现,看得我眼花缭乱。今天,我就用最直白的语言,带大家从零搭建一个微服务项目,并顺便聊聊为什么我们不用 JavaScript 或 Go 来做这件事。
一、什么是 Spring Cloud?它能干什么?
简单说,Spring Cloud 是一套基于 Spring Boot 的微服务工具集。当你把一个大系统拆成多个小服务(比如用户服务、订单服务、商品服务),这些服务之间需要互相通信、管理、监控,Spring Cloud 就是帮你搞定这些事的“管家”。
💡 举个例子:
如果你用单体架构(所有功能写在一个项目里),就像一个人既要当厨师、又要当服务员、还要收银。而微服务就像开了一家连锁餐厅,每个店只负责一件事,但需要协调配合。
二、为什么不直接用 JavaScript 或 Go?
很多新手会问:“现在 Node.js 和 Go 很火,能不能用它们做微服务?”当然可以!但选择技术栈要看场景:
| 技术栈 | 适合场景 | 微服务生态成熟度 | 学习曲线 |
|---|---|---|---|
| Java + Spring Cloud | 企业级后端、高稳定性需求 | ⭐⭐⭐⭐⭐(非常成熟) | 中等 |
| JavaScript (Node.js) | 快速原型、前后端同构、I/O 密集型 | ⭐⭐☆ | 较低 |
| Go | 高并发、轻量级服务、云原生 | ⭐⭐⭐ | 中等偏上 |
我的建议:如果你目标是进大厂或做企业级后端开发,Java + Spring Cloud 是绕不开的标配。我当初实习时,团队所有微服务都是用 Spring Cloud 搭建的,稳定性、监控、链路追踪一整套都配齐了。
三、环境准备(手把手教你装)
1. 必装软件
- JDK 8 或 11(推荐 11)
- Maven(构建工具)
- IntelliJ IDEA(或 VS Code + Java 插件)
- Git
2. 验证安装
打开终端,依次运行:
java -version # 应显示 11.x
mvn -v # 显示 Maven 版本
⚠️ 新手避坑:不要用 JDK 17+ 初学 Spring Cloud!部分老版本兼容性有问题。
四、核心概念:用“外卖点餐”来理解
想象你要点外卖:
- 服务注册中心(Eureka) → 像“美团商家列表”。所有餐厅(服务)都要先在这里登记,顾客(其他服务)才能找到它们。
- 服务调用(Feign/RestTemplate) → 你打电话给餐厅下单。
- 配置中心(Config) → 所有餐厅的菜单统一由总部管理,不用每家店单独改。
- 网关(Gateway) → 外卖平台入口,所有请求先经过它再分发。
五、实战:5分钟搭建第一个微服务
我们将创建两个服务:
user-service:提供用户信息order-service:调用 user-service 获取用户数据
步骤 1:创建 Eureka 注册中心
选择:
- Project: Maven
- Language: Java
- Spring Boot: 2.7.x
- Dependencies: Eureka Server
点击 Generate,解压后导入 IDEA
在启动类加注解:
@EnableEurekaServer
@SpringBootApplication
public class RegistryApplication {
public static void main(String[] args) {
SpringApplication.run(RegistryApplication.class, args);
}
}
application.yml配置:
server:
port: 8761
eureka:
client:
register-with-eureka: false
fetch-registry: false
- 启动!访问
http://localhost:8761,看到 Eureka 界面就成功了!
步骤 2:创建 user-service
- 再次用 start.spring.io 创建新项目,选 Eureka Client + Spring Web
- 启动类加
@EnableEurekaClient application.yml:
server:
port: 8081
spring:
application:
name: user-service
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka/
- 写个 Controller:
@RestController
public class UserController {
@GetMapping("/user/{id}")
public String getUser(@PathVariable String id) {
return "User-" + id;
}
}
- 启动后,刷新 Eureka 页面,你会看到
USER-SERVICE已注册!
步骤 3:创建 order-service 并调用 user-service
- 同样创建项目,依赖选 Eureka Client + Spring Web
- 配置
application.yml(端口设为 8082,name 为 order-service) - 使用 RestTemplate 调用:
@Configuration
public class RestConfig {
@Bean
@LoadBalanced // 关键!开启负载均衡
public RestTemplate restTemplate() {
return new RestTemplate();
}
}
@RestController
public class OrderController {
@Autowired
private RestTemplate restTemplate;
@GetMapping("/order/{userId}")
public String createOrder(@PathVariable String userId) {
// 通过服务名调用,不是 IP!
String user = restTemplate.getForObject("http://user-service/user/" + userId, String.class);
return "Order for " + user;
}
}
- 启动 order-service,访问
http://localhost:8082/order/123
→ 你应该看到:Order for User-123
✅ 恭喜!你完成了第一个微服务调用!
六、新手常见问题解答
Q1:为什么不能直接用 IP 调用,非要走服务名?
A:因为微服务实例可能动态扩缩容(比如从1台变3台)。用服务名 + 注册中心,系统会自动做负载均衡,你不用关心具体 IP。
Q2:Eureka 页面显示“RENEWALS ARE LESSER THAN THRESHOLD”警告?
A:这是单机模式的正常警告,加配置关闭即可:
eureka:
server:
enable-self-preservation: false
Q3:能用 JavaScript 或 Go 写其中一个服务吗?
A:技术上可以(通过 HTTP 接口互通),但会失去 Spring Cloud 的统一治理能力(如熔断、链路追踪)。除非团队明确采用多语言架构,否则不建议初学者混用。
七、下一步学习建议
- 先巩固基础:确保你理解 Spring Boot、REST API、Maven。
- 进阶组件:学 Gateway(网关)、Config(配置中心)、Sleuth(链路追踪)。
- 替代方案了解:Nacos(比 Eureka 更强大)、Consul(多语言友好)。
- 不要急于上 Kubernetes:先把 Spring Cloud 单机版玩熟再说!
📌 我的 B 站频道每周更新 Spring Cloud 实战系列,搜索“XXX后端课”就能找到我。下期我会带大家集成 Feign + Ribbon + Hystrix,实现声明式调用和熔断保护!
最后送大家一句话:微服务不是银弹,单体架构也有它的美。先学会拆,再学会合,才是真正的架构师思维。加油,未来的你一定会感谢现在动手敲代码的自己!

评论 0