Spring Cloud Alibaba 生产实践:零基础新手入门教程

后端便利贴
2025-06-14 21:55
阅读 686

开篇:Spring Cloud Alibaba 是什么?

开篇:Spring Cloud Alibaba 是什么?

在开发大型系统(比如电商网站、社交平台)时,我们通常会把一个大系统拆成多个小的独立部分来管理。这种架构方式叫做微服务架构

Spring Cloud Alibaba 就是一套帮助你轻松搭建和管理这些“小服务”的工具集合。它基于 Spring Cloud 构建,提供了很多阿里巴巴多年积累下来的经验和组件,比如:

  • 服务注册与发现
  • 配置中心
  • 负载均衡
  • 熔断降级
  • 分布式链路追踪

你可以把它想象成是一个帮你把微服务“搭起来”、“管得好”、“跑得稳”的超级工具箱。


环境准备:搭建你的学习环境

环境准备:搭建你的学习环境

说明:本教程使用 Java + Maven + Spring Boot + Spring Cloud Alibaba,适合 Windows、Mac 或 Linux 用户。

1. 安装 JDK(Java)

推荐使用 Java 8 或 Java 11。

java -version
javac -version

2. 安装 IDE(推荐 IntelliJ IDEA)

3. 安装 Maven

Maven 是用来管理项目依赖(就是你需要用到的库)的工具。

mvn -v

4. 安装 Nacos Server(后面会用到)

Nacos 是 Spring Cloud Alibaba 中的服务注册中心和配置中心。

启动成功后,在浏览器访问:http://localhost:8848/nacos
账号密码都是:nacos


核心概念:通俗讲解 Spring Cloud Alibaba 的几大工具

核心概念:通俗讲解 Spring Cloud Alibaba 的几大工具

为了方便理解,我把每个核心组件比作生活中的例子:

工具名称 作用 类比
Nacos 服务注册中心 + 配置中心 公司员工花名册 + 员工资料档案室
Sentinel 流量控制 / 熔断降级 红绿灯系统 / 安全阀
Feign 微服务之间调用接口 快递公司的分拣员
Gateway 请求统一入口 大厦前台接待

我们接下来会逐一实战这些工具。


实战项目:创建一个订单服务+商品服务的小型电商平台

我们将通过这个项目体验 Spring Cloud Alibaba 的基本功能:

  • 订单服务调用商品服务获取商品信息
  • 使用 Nacos 注册服务
  • 使用 Sentinel 控制流量
  • 使用 Gateway 统一路由

第一步:创建 Spring Boot 项目

使用 Spring Initializr 创建两个服务:

订单服务 order-service

  • 名称:order-service
  • 依赖项:Spring Web, Spring Cloud Alibaba Nacos Discovery

商品服务 product-service

  • 名称:product-service
  • 依赖项:Spring Web, Spring Cloud Alibaba Nacos Discovery

你可以手动新建 Maven 项目,或使用 https://start.spring.io/ 自动生成压缩包解压即可。


第二步:配置 Nacos 服务注册

修改 pom.xml 添加 Nacos Client

在两个项目的 pom.xml 中添加以下依赖:

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    <version>2022.0.0.0</version> <!-- 注意版本要适配 Spring Cloud -->
</dependency>

缓存策略对比-1

修改 application.yml

在 order-service 的 application.yml 中写入:
server:
  port: 8081
spring:
  application:
    name: order-service
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848
在 product-service 的 application.yml 中写入:
server:
  port: 8082
spring:
  application:
    name: product-service
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848

启动两个服务

先确保 Nacos Server 已经运行,然后分别运行这两个服务。打开浏览器访问:
http://localhost:8848/nacos,你会看到两个服务已经注册成功。


第三步:实现服务间通信(Feign)

我们让订单服务调用商品服务获取数据。

在 order-service 的 pom.xml 中增加 Feign 支持:

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

新建 ProductClient 接口:

在 order-service 的 src/main/java 下新建:

@FeignClient(name = "product-service")
public interface ProductClient {
    @GetMapping("/products/{id}")
    String getProductById(@PathVariable("id") Long id);
}

启用 Feign(主类中加入注解)

找到主类 OrderServiceApplication.java,加上:

@EnableFeignClients

编写测试 Controller:

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

    @Autowired
    private ProductClient productClient;

    @GetMapping("/product/{id}")
    public String getOrderProduct(@PathVariable Long id) {
        return productClient.getProductById(id);
    }
}

在 product-service 中也新建一个简单 Controller:

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

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

测试一下!

启动两个服务,访问:

http://localhost:8081/orders/product/101

你应该会看到返回内容:“商品 ID:101, 名称:iPhone 15”

🎉 恭喜!你已经完成了微服务之间的远程调用!


第四步:使用 Sentinel 加入限流保护

添加 Sentinel 依赖

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

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
    <version>2022.0.0.0</version>
</dependency>

下载并运行 Sentinel Dashboard:

访问:http://localhost:8080 登录账号密码是 sentinel/sentinel

配置应用连接 Sentinel:

在 order-service 的 application.yml 中添加:

spring:
  cloud:
    sentinel:
      transport:
        dashboard: localhost:8080

启动应用后访问一次 API

再刷新 Sentinel 控制台,你就能在应用列表里看到 order-service 了。

设置限流规则:

点击 “流控规则” → 新增 → 输入资源名 /orders/product/{id} → 设置 QPS 为 1 → 启用规则

此时如果你多次快速请求,就会看到错误提示(默认是 Blocked by Sentinel

💡 这就是熔断限流的作用!


第五步:使用 Gateway 统一请求入口

新建 gateway-service

创建一个新的 Spring Boot 项目:

  • 名称:gateway-service
  • 依赖:Spring Cloud Gateway, Nacos Discovery, Sentinel

添加依赖:

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>

配置网关路由规则:

在 application.yml 中配置:

server:
  port: 9090
spring:
  application:
    name: gateway-service
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848
    gateway:
      routes:
        - id: product-route
          uri: lb://product-service
          predicates:
            - Path=/api/products/**
          filters:
            - StripPrefix=1
        - id: order-route
          uri: lb://order-service
          predicates:
            - Path=/api/orders/**
          filters:
            - StripPrefix=1

这样设置之后:

  • /api/products/** → 转发给 product-service
  • /api/orders/** → 转发给 order-service

测试网关访问:

重启所有服务,然后访问:

http://localhost:9090/api/orders/product/101

应该仍然能正常返回 iPhone 15 的信息!


常见问题解答(FAQ)

Q1:为什么我启动 Nacos 报错?

A:可能是端口冲突,确认 8848 没有被占用;或者检查 JDK 版本是否兼容。

Q2:Feign 调用失败怎么办?

A:确认 Nacos 是否正常注册服务;检查 FeignClient 注解的 name 是否正确拼写;确认目标服务的接口路径正确。

Q3:Sentinel 控制台看不到我的服务?

A:检查网关配置是否开启了 Sentinel 插件;确认应用已访问过一次目标接口(懒加载机制)。

Q4:项目打包部署到服务器要注意什么?

A:注意 Java 版本一致;将配置信息(如数据库地址等)移到 Nacos 配置中心统一管理。


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

恭喜你完成了 Spring Cloud Alibaba 的第一个小项目!

接下来可以按下面的方向继续深入:

  1. 进阶模块学习

    • 学习 Seata(分布式事务)
    • 学习 RocketMQ(消息队列)
    • 学习 Sleuth + Zipkin(链路追踪)
  2. 部署上线实战

    • 使用 Docker 打包镜像
    • 学习 Kubernetes 部署集群
    • 学习 Jenkins CI/CD 自动化部署
  3. 源码学习

    • 阅读 Nacos 和 Sentinel 核心源码
    • 理解服务治理背后的原理
  4. 真实项目练手

    • 自己从零构建一个仿京东商城系统
    • 参与开源项目,提升实战能力

总结

本教程从零开始带你了解 Spring Cloud Alibaba,并通过实战完成了一个简单的微服务电商系统原型。主要涵盖了:

  • 环境搭建
  • Nacos 服务注册发现
  • Feign 接口调用
  • Sentinel 流量保护
  • Gateway 统一网关入口

希望你通过这篇教程迈出了微服务开发的第一步,未来继续加油,成为优秀的后端工程师!💪

如需完整代码,请留言或私信交流 👇

评论 0

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