Spring Cloud从零开始:微服务入门指南

贪心没贪够
2025-12-14 18:03
阅读 343

大家好,我是你们的老朋友,一个在大厂干了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!部分老版本兼容性有问题。


四、核心概念:用“外卖点餐”来理解

想象你要点外卖:

  1. 服务注册中心(Eureka) → 像“美团商家列表”。所有餐厅(服务)都要先在这里登记,顾客(其他服务)才能找到它们。
  2. 服务调用(Feign/RestTemplate) → 你打电话给餐厅下单。
  3. 配置中心(Config) → 所有餐厅的菜单统一由总部管理,不用每家店单独改。
  4. 网关(Gateway) → 外卖平台入口,所有请求先经过它再分发。

五、实战:5分钟搭建第一个微服务

我们将创建两个服务:

  • user-service:提供用户信息
  • order-service:调用 user-service 获取用户数据

步骤 1:创建 Eureka 注册中心

  1. 访问 start.spring.io

  2. 选择:

    • Project: Maven
    • Language: Java
    • Spring Boot: 2.7.x
    • Dependencies: Eureka Server
  3. 点击 Generate,解压后导入 IDEA

  4. 在启动类加注解:

@EnableEurekaServer
@SpringBootApplication
public class RegistryApplication {
    public static void main(String[] args) {
        SpringApplication.run(RegistryApplication.class, args);
    }
}
  1. application.yml 配置:
server:
  port: 8761
eureka:
  client:
    register-with-eureka: false
    fetch-registry: false
  1. 启动!访问 http://localhost:8761,看到 Eureka 界面就成功了!

步骤 2:创建 user-service

  1. 再次用 start.spring.io 创建新项目,选 Eureka Client + Spring Web
  2. 启动类加 @EnableEurekaClient
  3. application.yml
server:
  port: 8081
spring:
  application:
    name: user-service
eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka/
  1. 写个 Controller:
@RestController
public class UserController {
    @GetMapping("/user/{id}")
    public String getUser(@PathVariable String id) {
        return "User-" + id;
    }
}
  1. 启动后,刷新 Eureka 页面,你会看到 USER-SERVICE 已注册!

步骤 3:创建 order-service 并调用 user-service

  1. 同样创建项目,依赖选 Eureka Client + Spring Web
  2. 配置 application.yml(端口设为 8082,name 为 order-service)
  3. 使用 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;
    }
}
  1. 启动 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 的统一治理能力(如熔断、链路追踪)。除非团队明确采用多语言架构,否则不建议初学者混用。


七、下一步学习建议

  1. 先巩固基础:确保你理解 Spring Boot、REST API、Maven。
  2. 进阶组件:学 Gateway(网关)、Config(配置中心)、Sleuth(链路追踪)。
  3. 替代方案了解:Nacos(比 Eureka 更强大)、Consul(多语言友好)。
  4. 不要急于上 Kubernetes:先把 Spring Cloud 单机版玩熟再说!

📌 我的 B 站频道每周更新 Spring Cloud 实战系列,搜索“XXX后端课”就能找到我。下期我会带大家集成 Feign + Ribbon + Hystrix,实现声明式调用和熔断保护!


最后送大家一句话:微服务不是银弹,单体架构也有它的美。先学会拆,再学会合,才是真正的架构师思维。加油,未来的你一定会感谢现在动手敲代码的自己!

评论 0

最热最新
暂无评论
匿名用户Lv.1
0
影响力
0
文章
0
粉丝