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

朱勇~
2025-06-24 17:54
阅读 202

开篇: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 项目)

  1. 打开 start.spring.io
  2. 填写如下信息:
    • 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)

  1. 创建名为 eureka-server 的子项目(Maven Module)。
  2. pom.xml 中添加以下依赖:
<dependencies>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
    </dependency>
</dependencies>
  1. 修改配置文件 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/
  1. 修改启动类:
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 并注册到注册中心

  1. 新建模块 user-service
  2. 添加依赖(在 pom.xml):
<dependencies>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    </dependency>
</dependencies>
  1. 配置文件 application.yml 内容如下:
server:
  port: 8081

spring:
  application:
    name: user-service

eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka/
  1. 启动类加上注解:
@SpringBootApplication
@EnableEurekaClient
public class UserServiceApplication {
    public static void main(String[] args) {
        SpringApplication.run(UserServiceApplication.class, args);
    }
}
  1. 写一个测试 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

  1. 新建模块 product-service
  2. 加入同样的 Eureka 客户端依赖,并设置端口为 8082,名字为 product-service
  3. 使用 Feign 客户端调用 user-service,添加以下依赖:
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
  1. 启动类加注解:
@SpringBootApplication
@EnableEurekaClient
@EnableFeignClients
public class ProductServiceApplication {
    public static void main(String[] args) {
        SpringApplication.run(ProductServiceApplication.class, args);
    }
}
  1. 创建 Feign 客户端接口:
@FeignClient(name = "user-service")
public interface UserFeignClient {
    @GetMapping("/users/{id}")
    String getUserById(@PathVariable("id") Long id);
}
  1. 写一个调用控制器:
@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

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