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

代码里的风
2025-06-14 06:50
阅读 490

一、开篇:什么是Spring Cloud?它能用来做什么?

一、开篇:什么是Spring Cloud?它能用来做什么?

你可能听说过“微服务”这个词,它是一种现代软件架构方式,将一个大应用拆分成多个小的、独立的服务,每个服务都可以独立开发、部署和扩展。

Spring Cloud 就是 Java 生态中专门为构建微服务系统提供的一套工具集。它不是某个具体的技术,而是多个项目的集合,帮助开发者更方便地管理分布式系统中的各种问题。

比如:

  • 多个服务怎么发现彼此?
  • 如何统一配置多个服务?
  • 如果某一个服务挂了怎么办?

这些问题 Spring Cloud 都提供了解决方案。

🎯 本教程目标:带着你一步步用 Spring Cloud 搭建一个最简单的微服务项目。


二、环境准备:搭建开发环境(超详细)

二、环境准备:搭建开发环境(超详细)

我们使用最主流的 Java 开发栈来完成本次教程。

所需工具清单:

工具 版本建议
JDK Java 17 或 Java 21
Maven 最新版本(3.8.x 以上)
IDE IntelliJ IDEA 社区版(推荐)或 Eclipse
Spring Boot 推荐使用 Spring Boot 3.x
Spring Cloud 推荐使用 2022.0.x 系列

步骤 1:安装 JDK 并配置环境变量

  1. 前往 https://adoptium.net/ 下载对应系统的 JDK
  2. 安装完成后,在命令行输入:
java -version

输出类似下面内容说明安装成功:

openjdk version "17.0.6" 2023-01-17

步骤 2:安装 IntelliJ IDEA

前往官网下载社区版(免费):
👉 https://www.jetbrains.com/idea/download/

安装后启动,设置好 JDK 和 Maven 路径即可。

步骤 3:创建第一个 Spring Boot 项目

打开浏览器访问 👉 https://start.spring.io/
选择如下选项:

  • Project: Maven
  • Language: Java
  • Spring Boot Version: 3.0.x(最新稳定版)
  • Dependencies: Spring Web

点击 “Generate” 下载生成好的基础工程,解压后用 IDEA 打开即可。

✅ 小提示:确保 pom.xml 中有 <packaging>jar</packaging>,因为我们要用到内嵌服务器。

运行 main() 方法后,访问 http://localhost:8080,你会看到默认的 Spring Boot 启动页面 —— 表示你的环境准备好了!


三、核心概念通俗讲解

三、核心概念通俗讲解

1. 微服务是什么?

你可以理解为:“一个大程序被切成了很多个小的独立小程序”,每个小程序负责一个功能模块。例如:

  • 用户服务:专门处理用户注册、登录
  • 商品服务:处理商品信息
  • 订单服务:处理下单逻辑

好处是:可以分团队开发、单独部署升级、出错影响更小。

2. 注册中心 Eureka Server(服务管理中心)

想象一下公司里有一本通讯录,员工想找谁都要先查这个通讯录。
Eureka Server 就像是微服务里的通讯录,记录有哪些服务可用。

3. 客户端服务 Eureka Client(注册到通讯录的小服务)

每一个小服务都会告诉 Eureka Server 自己叫什么名字、在哪台机器上运行。

这样其他服务就可以通过通讯录找到它。

4. 负载均衡 Ribbon / LoadBalancer

Ribbon 是旧版本常用的负载均衡器,现在 Spring Cloud 通常搭配 LoadBalancer 使用,用于在多个服务实例之间进行轮询调用。

比如:有三个订单服务实例在跑,LoadBalancer 可以帮你随机选择一个去请求。


四、实战项目:手把手教你写一个简单微服务项目

四、实战项目:手把手教你写一个简单微服务项目

我们将做一个最简单的例子:

  • 一个注册中心 Eureka Server
  • 两个客户端服务:用户服务 user-service 和订单服务 order-service
  • 用户服务能调用订单服务获取数据

第一步:创建 Eureka Server(注册中心)

1. 新建 Maven 项目 spring-cloud-eureka-server

使用 Spring Initializr 创建一个项目,并添加以下依赖:

  • Spring Web
  • Eureka Server

修改 application.yml

server:
  port: 8761

eureka:
  instance:
    hostname: localhost
  client:
    registerWithEureka: false
    fetchRegistry: false
    serviceUrl:
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/

然后在主类加上注解启用 Eureka 服务:

@EnableEurekaServer
@SpringBootApplication
public class EurekaServerApplication {
    public static void main(String[] args) {
        SpringApplication.run(EurekaServerApplication.class, args);
    }
}

运行主类后访问 http://localhost:8761,可以看到注册中心界面。


第二步:创建用户服务 user-service

同样新建 Spring Boot 项目,添加如下依赖:

  • Spring Web
  • Eureka Discovery Client

配置 application.yml:

spring:
  application:
    name: user-service

server:
  port: 8081

eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/

启动类添加注解启用服务发现:

@EnableDiscoveryClient
@SpringBootApplication
public class UserServiceApplication {
    public static void main(String[] args) {
        SpringApplication.run(UserServiceApplication.class, args);
    }
}

创建一个 Controller 测试服务:

@RestController
@RequestMapping("/user")
public class UserController {
    @GetMapping("/hi")
    public String sayHi() {
        return "User Service is running!";
    }
}

运行后刷新 Eureka 页面:你应该能看到 user-service 出现在已注册服务列表中。


第三步:创建订单服务 order-service

步骤与用户服务一致,只是改下名称和端口号:

application.yml:

spring:
  application:
    name: order-service

server:
  port: 8082

eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/

Controller 示例:

@RestController
@RequestMapping("/order")
public class OrderController {
    @GetMapping("/list")
    public String getOrderList() {
        return "Order list data here.";
    }
}

启动后刷新 Eureka,应该能看到两个服务都在运行。


第四步:实现服务间调用(Feign + LoadBalancer)

我们要让用户服务去调用订单服务。

添加 Feign 客户端支持

在 user-service 的 pom.xml 中添加:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

启动类添加注解:

@EnableFeignClients
@EnableDiscoveryClient
@SpringBootApplication
public class UserServiceApplication { ... }

创建一个远程调用接口:

@FeignClient(name = "order-service")
public interface OrderClient {
    @GetMapping("/order/list")
    String getOrderList();
}

然后在 UserController 中使用它:

@Autowired
private OrderClient orderClient;

@GetMapping("/call-order")
public String callOrderService() {
    return "Calling Order Service: " + orderClient.getOrderList();
}

运行 user-service,访问:

👉 http://localhost:8081/user/call-order

如果能看到返回 "Order list data here.",恭喜你完成了第一次微服务之间的通信!


五、常见问题解答(FAQ)

问题1:服务注册不上 Eureka?

✅ 解决方法:

  • 检查 application.yml 是否正确配置了 eureka.client.serviceUrl.defaultZone
  • 确保 Eureka Server 先启动
  • 查看日志是否有连接失败错误

问题2:Feign 报错“UnknownHostException: order-service”

✅ 解决方法:

  • 检查 order-service 是否确实注册到了 Eureka
  • 检查是否漏掉了 @EnableDiscoveryClient
  • 检查 FeignClient 注解的 name 是否写对

问题3:Feign 不兼容 Spring Boot 3?

✅ 解决方法: Spring Boot 3 使用 Jakarta EE 包名变化,请确认使用 Spring Cloud 2022.0.x 及以上版本。


六、学习建议:下一步该学什么?

恭喜你完成了第一个 Spring Cloud 微服务项目!接下来你还可以尝试学习这些内容:

主题 内容简要 学习建议
配置中心 Spring Cloud Config + Git 学会集中管理所有微服务的配置文件
网关 Spring Cloud Gateway 统一入口管理,权限控制
限流熔断 Resilience4j / Hystrix(已弃用) 提高系统健壮性
分布式链路追踪 Sleuth + Zipkin 追踪请求在多个服务间的流转
日志聚合 ELK(Elasticsearch+Logstash+Kibana) 看清整个系统的日志全貌

🎯 推荐路线图:

Spring Boot → Spring Cloud 核心组件 → 微服务部署(Docker/Kubernetes)→ 实战完整系统

如果你已经能按照本教程完成实践部分,那么恭喜你,你已经跨过了 Spring Cloud 微服务的大门!继续加油,未来可期!🚀

评论 0

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