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

一个会部署的人
2025-06-23 07:44
阅读 492

开篇:什么是Spring Cloud?它能做什么?

开篇:什么是Spring Cloud?它能做什么?

你好!欢迎来到这篇写给完全零基础初学者的Spring Cloud 微服务入门教程

首先,我们先来理解一下这两个关键词:

  • Spring 是一个非常流行的 Java 开发框架,简化了企业级应用的开发。
  • Cloud 指的是“云计算”,它可以帮助我们将应用程序部署在远程服务器上,并支持多个模块协同工作。

所以,Spring Cloud 就是一个基于 Spring 构建的云原生开发工具集,特别适合用来构建和管理微服务架构的应用。

💡 所谓微服务,就是把一个大系统拆分成多个小系统(服务),每个服务可以独立开发、部署和运行。就像一座大房子被分成了不同的房间,各司其职。

用一句话总结:

Spring Cloud = 帮你搭建微服务系统的强大工具包


环境准备:让我们准备好开发环境

环境准备:让我们准备好开发环境

要学习 Spring Cloud,我们需要以下基本开发环境:

✅ 安装 JDK(Java Development Kit)

推荐使用 JDK 17 或以上版本。你可以通过下面命令检查是否安装成功:

java -version

没有安装的话,可以到 Oracle官网 或者使用开源版本如 OpenJDK 下载安装。


✅ 安装 IntelliJ IDEA(推荐 IDE)

虽然也可以用 Eclipse 或 VS Code,但建议新手使用 IntelliJ IDEA 社区版(免费),功能强大又智能,下载地址:https://www.jetbrains.com/idea/download/


✅ 安装 Maven(项目管理工具)

Maven 可以帮助我们自动下载依赖库。安装后输入下面命令验证是否成功:

mvn -v

✅ 注册 GitHub 账号(可选)

我们可以把项目代码托管到 GitHub,方便保存和分享,访问 https://github.com 创建账号即可。


核心概念讲解:通俗易懂地看懂关键术语

为了更好地理解 Spring Cloud 的结构,我们必须知道几个核心的概念,我用最简单的语言为你解释它们:


🧩 1. 服务注册与发现 Eureka Server

想象你在公司上班,每天要找同事开会或问问题。如果没有员工花名册,你能找到人吗?不能。

Eureka 就是这样一个“花名册”,它记录了所有微服务的名字和位置。其他服务可以通过它知道自己需要找谁。


📡 2. 路由网关 Gateway / Zuul

网关就是一个“接待员”,负责把客户请求分配到对应的部门去处理。比如用户想要查订单,就引导他去“订单部门”;想支付,就引导到“支付部门”。


🔐 3. 配置中心 Config

想象你要修改一个全局参数(比如数据库地址),如果手动改每一个服务,效率很低。配置中心就是用来统一管理这些配置的地方。


⏳ 4. 服务熔断 Hystrix

当某个服务突然崩溃或者响应太慢时,我们需要有一种机制来防止整个系统瘫痪。Hystrix 相当于一个“备用电源”,让程序不至于因为一个小问题而崩溃。


📊 5. 分布式链路追踪 Sleuth + Zipkin

如果你的服务之间调用关系很复杂,怎么找出哪里卡住了呢?这个组合就像给你提供了一个“监控地图”,告诉你每一步发生了什么。


是不是听上去有点抽象?别担心,我们会在实战部分具体使用其中几个工具,你会逐渐理解这些概念的作用。


实战项目:一步步构建你的第一个 Spring Cloud 应用

API接口文档-1

我们的目标是搭建三个简单服务:商品服务、库存服务、订单服务,并且实现服务注册与查找。

我们使用的是:

  • Spring Boot 2.x
  • Spring Cloud 2021.x
  • Eureka 做注册中心

第一步:创建父工程(pom.xml)

新建一个 Maven 项目,命名为 spring-cloud-demo,作为父工程,在 pom.xml 中加入如下内容:

<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.example</groupId>
    <artifactId>spring-cloud-demo</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>pom</packaging>

    <modules>
        <module>eureka-server</module>
        <module>product-service</module>
        <module>inventory-service</module>
    </modules>

    <properties>
        <spring.boot.version>2.6.12</spring.boot.version>
        <spring.cloud.version>2021.0.3</spring.cloud.version>
    </properties>

    <dependencyManagement>
        <dependencies>
            <!-- Spring Boot -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>${spring.boot.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <!-- Spring Cloud -->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring.cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
</project>

第二步:创建 Eureka 服务中心

新建子模块 eureka-server,并添加 Eureka Server 依赖。

pom.xml

<dependencies>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
    </dependency>
</dependencies>

启动类 EurekaServerApplication.java

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

application.yml

server:
  port: 8761

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

启动之后访问:http://localhost:8761 查看注册中心页面。


第三步:创建一个商品服务 product-service

同样新建子模块 product-service

pom.xml

<dependencies>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
</dependencies>

启动类 ProductServiceApplication.java

@SpringBootApplication
@EnableEurekaClient
@RestController
public class ProductServiceApplication {

    @GetMapping("/product")
    public String getProduct() {
        return "This is a product!";
    }

    public static void main(String[] args) {
        SpringApplication.run(ProductServiceApplication.class, args);
    }
}

application.yml

server:
  port: 8081

spring:
  application:
    name: product-service

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

运行该服务,打开 Eureka 页面查看,你会看到多出一个名为 product-service 的服务。


第四步:再加一个库存服务 inventory-service

这个服务的创建方式跟上面基本一样,只是接口不同:

启动类 InventoryServiceApplication.java

@SpringBootApplication
@EnableEurekaClient
@RestController
public class InventoryServiceApplication {

    @GetMapping("/stock")
    public String getStock() {
        return "In stock: 100 items";
    }

    public static void main(String[] args) {
        SpringApplication.run(InventoryServiceApplication.class, args);
    }
}

application.yml

server:
  port: 8082

spring:
  application:
    name: inventory-service

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

现在你已经完成了三个服务的初步搭建!

🎉 运行顺序提醒:

  1. 先启动 eureka-server
  2. 再启动 product-service
  3. 最后启动 inventory-service

常见问题解答(FAQ)

❓ Q1:为什么我启动服务时报错 “Connection refused to host: 127.0.0.1”?

这是说明 Eureka 服务器还没启动,请确保先启动注册中心。


❓ Q2:为什么我在 Eureka 页面看不到自己的服务?

请检查你的 application.yml 文件里的 eureka.client.serviceUrl.defaultZone 是否指向正确端口,一般是 8761


❓ Q3:我可以用别的注册中心吗?比如 Zookeeper 或 Nacos?

当然可以!除了 Eureka,Spring Cloud 也支持 Consul、Zookeeper 和阿里巴巴的 Nacos。Eureka 是 Netflix 的方案,适合作为入门。


❓ Q4:如何测试两个微服务之间的调用?

后面我们会介绍 Feign 和 RestTemplate,让你轻松实现跨服务调用。


学习建议:下一步学什么?

恭喜你完成了 Spring Cloud 的第一次体验!接下来你可以继续探索以下方向:

🔹 1. API网关 Gateway/Zuul

将多个服务整合成一个对外接口,统一入口。


🔹 2. 服务调用 OpenFeign / Ribbon

实现服务间的通信,就像打个电话给别人协作。


🔹 3. 分布式配置中心 Config

把配置文件集中管理,避免重复复制。


🔹 4. 熔断限流 Hystrix / Resilience4j

保护系统稳定,避免雪崩效应。


🔹 5. 服务安全认证 Spring Security / OAuth2

保护你的服务不被非法访问。


🧭 推荐学习路径图

Spring Boot -> Eureka (服务注册) 
               ↓
              Feign/Ribbon (服务通信)
               ↓
             Gateway (网关)
               ↓
           Config (配置中心)
               ↓
         Hystrix (容错熔断)
               ↓
   Security / OAuth2 (权限控制)

结语

希望这篇教程能让你对 Spring Cloud 有一个初步的认识。微服务听起来很高大上,但它其实是一步步搭建起来的系统。

记住:
✅ 多动手
✅ 多调试
✅ 多思考问题背后的逻辑

技术不是一下子就能学会的,但坚持下去,你一定能走得更远!

如需完整的源码示例,可以关注我,我会陆续发布相关项目仓库链接。

祝你学习愉快,成为出色的后端开发者!🌱

评论 0

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