SpringCloudAlibaba之Integrated Example示例工程源码解读一

561 阅读4分钟

综述

Spring Cloud Alibaba提供了一些示例工程来演示和说明各个组件的使用方式和功能,这些示例工程位于 Spring Cloud Alibaba GitHub 仓库中,你可以从该仓库中获取源码并进行学习和参考。

image.png

本系列文章将全面解析integrated-example示例项目的架构原理和代码实现。

该项目为Spring Cloud Alibaba容器化部署最佳实践的 Demo 演示项目,是整合了Spring Cloud Alibaba相关组件(Nacos, Sentinel, Seata, RocketMQ)的示例项目。

其主要使用的组件及及其使用特性如下:

  • Spring Cloud Gateway 网关
  • Nacos 配置中心和服务注册中心
  • Sentinel 熔断限流
  • Seata 分布式事务
  • RocketMQ 消息队列削峰填谷
  • Docker 微服务容器化部署
  • Kubernetes Helm Chart

源码工程说明

Spring Cloud Alibaba源码地址:github.com/alibaba/spr…

所有的示例工程均位于spring-cloud-alibaba/spring-cloud-alibaba-examples目录下。 image.png

进入目录找到integrated-example模块,如下图: image.png

此模块下面还有若干子模块,如下图:红框中的子模块为主要的服务。

image.png

项目的模块说明如下

模块名称模块说明
integrated-order订单服务
integrated-account账户余额服务
integrated-storage商品库存服务
integrated-praise-provider点赞生产者服务
integrated-praise-consumer点赞消费者服务
integrated-common公共组件,异常封装,响应结构等。
integrated-front前端页面
config-init数据库表和各服务配置数据初始化脚本
docs中英文文档,包括项目介绍,以及三种部署方式说明(本地部署、k8s部署、docker部署)
docker-composeDocker 微服务容器化部署
helm-chartKubernetes Helm Chart

总体架构

此示例中演示了两种场景:

  1. 用户下单购买商品

    用户下单流程涉及到【余额扣减】、【库存扣减】以及【订单创建】三个步骤。每个步骤均在不同的服务中执行,涉及到服务间的调用和分布式事务处理。

  2. 用户为商品进行点赞

    点赞服务模拟高并发场景下,如何实现服务限流和削峰填谷。

总体架构如下:

image.png

外部服务接入: 外部请求统一通过API网关接入。

  • API网关采用Spring Cloud Gateway实现。Spring Cloud Gateway基于WebFlux,采用Reactor Netty作为底层通信组件
  • 采用Spring Cloud LoadBalancer组件进行负载均衡
  • 整合nacos实现动态路由配置
  • 通过sentinel组件对“/praise/sentinel”接口服务实行限流

服务内部通信

  • 内部服务之间通过openfeign组件互相调用,openfeign底层通信采用WebClient,WebClient基于Reactor框架,支持异步和非阻塞的方式进行HTTP通信。
  • 采用Spring Cloud LoadBalancer组件进行负载均衡。

配置和服务发现:使用Nacos进行统一配置管理和服务注册发现管理。

image.png

服务注册列表中是没有integrated-front的,虽然它也是基于Spring Boot构建,但它并不属于后端微服务架构中的一部份,其仅仅是用来展示前端页面而已。

image.png

配置列表中每个服务对应一个独有的配置文件,数据源的公共配置部分出抽成了datasource-config.yaml配置文件。

image.png

网关配置(integrated-gateway.yaml)文件中包含了所有的外部HTTP API的路由配置,可以通过修改该配置文件动态刷新路由。

image.png

下单场景技术实现:订单服务(integrated-order)需要分别调用账户服务(integrated-account)扣减余额支付订单和库存服务(integrated-storage)扣减商品库存,并分别写入各个服务对应的数据库。此处采用Seata组件实现分布式事务,保证数据的强一致性。

点赞场景技术实现:点赞服务包括生产者服务(integrated-praise-provider)和消费者服务(integrated-praise-consumer),生产者服务和消费者服务之间用消息中间件RocketMQ连接。生产者服务将点赞数据做为消息发送至RocketMQ,由消费者服务消费RocketMQ消息后写入数据库。

点赞服务的外部调用有两个入口:【/praise/rocketmq】和【/praise/sentinel】。其中【/praise/sentinel】在网关处有配置限流策略,用于演示接口限流效果。【/praise/rocketmq】接口则将所有请求直接打到RocketMQ上,然后再由消费者按消费能力平滑处理,实际上就是演示基于rocketmq的削峰填谷能力。

好了,本文先简单介绍到这里,下一篇深入讲解代码实现。

下一篇:SpringCloudAlibaba之Integrated Example示例工程源码解读二 - 掘金 (juejin.cn)