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

林秀英
2025-06-16 18:27
阅读 746

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

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

你可能听说过“微服务”这个词。那它到底是啥呢?我们可以把它理解成一种新的编程方式——把一个大的应用程序拆分成一个个小的、独立运行的小程序(我们叫它们“微服务”),这些小程序之间通过网络通信来协同工作。

这就像是把一整个厨房的工作,分成了厨师、洗碗工、采购员等不同的岗位,每人都专注干自己的事,这样整体效率更高也更灵活。

Spring Cloud 就是一套帮你轻松搭建和管理这些微服务的技术组合包,包括服务发现、配置中心、负载均衡等等,就像是厨房里的智能管理系统。

所以今天这篇文章的目标就是:教你用Spring Cloud搭建一个最简单的微服务项目


环境准备:开发环境搭建步骤

环境准备:开发环境搭建步骤

在正式编写代码之前,你需要准备好开发环境。以下是具体的安装步骤:

✅ 安装 JDK 1.8 或以上版本

Spring Cloud 需要 Java 支持,建议使用 OpenJDK 安装。

java -version

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

openjdk version "17.0.9" 2023-10-17
OpenJDK Runtime Environment (build 17.0.9+9-Ubuntu-120.04)

✅ 安装 Maven 构建工具

Maven 是管理依赖和项目的构建工具。

sudo apt install maven
mvn -v

✅ 安装 IntelliJ IDEA(推荐)

下载地址:https://www.jetbrains.com/idea/download/

或者使用免费版的 VSCode + Java 插件也是可以的。


✅ 创建第一个 Spring Boot 项目(用作微服务基础)

访问官网:https://start.spring.io/

填写如下信息:

  • Project: Maven
  • Language: Java
  • Spring Boot Version: 3.x(比如 3.1.5)
  • Dependencies:
    • Spring Web
    • Eureka Discovery Client

点击 “Generate” 下载压缩包并解压打开。

打开 IDEA 导入 Maven 项目即可。


核心概念:通俗易懂的关键知识点解释

下面是几个 Spring Cloud 最核心的概念,我会尽量用简单的方式来解释。

📌 1. 服务注册与发现(Eureka Server)

你可以把它想象成一个电话簿系统。每个微服务启动之后都要去这里报到,并告诉大家:“我是谁,在哪”。其他服务要用到它时就可以通过这个目录查找联系方式。

📌 2. 负载均衡(Ribbon / LoadBalancer)

假设有三个功能一样的订单服务同时在线,当你请求下单的时候,系统会自动挑选其中一个性能最好的服务来处理请求,这就是负载均衡。

📌 3. 配置中心(Config Server)

有些设置是所有服务都要共享的,比如数据库密码。配置中心就是一个统一存放这些配置的地方。

📌 4. 网关(Gateway / Zuul)

你可以把它看成是一个“门卫”,所有用户请求必须先经过网关。网关可以做权限验证、限流、路由转发等功能。

现在我们以 服务注册与发现 + 两个服务之间的调用 为例,带你动手实战一下。


实战项目:一步步搭建你的第一个 Spring Cloud 微服务应用

我们的目标很简单:

  • 搭建一个服务中心 Eureka Server
  • 搭建两个服务:商品服务(ProductService)和订单服务(OrderService)
  • 让订单服务调用商品服务获取数据

第一步:创建 Eureka Server(服务中心)

新建一个 Maven 工程,添加以下依赖:

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

修改 application.yml 内容为:

server:
  port: 8761

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

主类加上注解:

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

启动后访问 http://localhost:8761,就能看到服务注册页面。


第二步:创建 Product Service 商品服务

新建 Spring Boot 工程,加入以下依赖:

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

配置文件 application.yml 添加:

server:
  port: 8081

spring:
  application:
    name: product-service

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

写个 Controller 测试接口:

@RestController
@RequestMapping("/products")
public class ProductController {

    @GetMapping("/{id}")
    public String getProduct(@PathVariable String id) {
        return "商品ID: " + id + ", 名称: iPhone手机";
    }
}

启动后刷新 Eureka 页面,能看到 product-service 注册成功了。


第三步:创建 Order Service 订单服务

同样结构的工程,只是端口改为 8082application.yml 中 spring.application.name 设置为 order-service

新增一个远程调用客户端:

@Component
public class ProductServiceClient {

    private final RestTemplate restTemplate;

    public ProductServiceClient(RestTemplate restTemplate) {
        this.restTemplate = restTemplate;
    }

    public String getProductById(String id) {
        return restTemplate.getForObject("http://product-service/products/" + id, String.class);
    }
}

再写一个控制器用于触发调用:

@RestController
@RequestMapping("/orders")
public class OrderController {

    private final ProductServiceClient productServiceClient;

    public OrderController(ProductServiceClient productServiceClient) {
        this.productServiceClient = productServiceClient;
    }

    @GetMapping("/{productId}")
    public String getOrder(@PathVariable String productId) {
        String productDetails = productServiceClient.getProductById(productId);
        return "订单信息:" + productDetails;
    }
}

注意:需要启用 RestTemplate bean:

@Bean
public RestTemplate restTemplate() {
    return new RestTemplate();
}

最后运行,访问: http://localhost:8082/orders/123

你会看到结果:

订单信息:商品ID: 123, 名称: iPhone手机

✅ 成功啦!


常见问题解答 FAQ

❓为什么启动时报错 UnknownHostException?

一般是服务还没注册上去就尝试调用了,请等待几秒钟再试一次。

❓RestTemplate 报错 Could not find service?

检查 @EnableDiscoveryClient 是否加上了,以及服务名是否正确。

❓Eureka 显示 No instances available for service 的问题?

检查服务是否真的启动了,网络能否连通,端口有没有冲突。


学习建议:接下来该学什么?

恭喜你已经完成第一个 Spring Cloud 微服务项目!接下来你可以继续深入学习以下方向:

学习模块 作用 推荐资源
Config Server 统一管理配置 官方文档
Gateway 请求过滤/路由 《Spring Cloud Gateway》实战手册
Feign/OpenFeign 简化远程调用 使用 @FeignClient 替代 RestTemplate
Sleuth & Zipkin 分布式日志追踪 查看各服务间调用链性能瓶颈
Docker 部署 微服务容器化部署 参考《Docker — 从零到部署》

💡提示:建议自己动手做一个完整的电商平台微服务系统,如用户服务、支付服务、物流服务等,边实践边总结!


总结回顾

本篇文章从零开始,带你一步步完成了 Spring Cloud 微服务系统的搭建,重点在于实践驱动和代码演示。希望通过这次练习,你已经对以下几个关键点有了清晰的理解:

  1. 什么是微服务和 Spring Cloud 的定位
  2. 如何搭建 Eureka 服务中心
  3. 如何创建多个服务并实现相互调用
  4. 实际开发中遇到的常见错误及解决方案
  5. 下一步深入学习的方向建议

只要你保持动手实践,Spring Cloud 并没有那么神秘!一起加油吧 😊

评论 0

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