写在前面

在前面我们学习的都是Netflix或者Spring官方社区提供的微服务组件,也就是通常意义上的Spring Cloud技术栈,但是在一开始就提到过实现微服务不一定需要使用Spring Cloud技术栈,还可以使用国内阿里巴巴公司开源的另一套方案,不过现在这套方案已经成功纳入Spring Cloud体系,并成为Spring Cloud Alibaba项目。

Spring Cloud Alibaba简介

Spring Cloud Alibaba致力于提供微服务开发的一站式解决方案。此项目包含开发分布式应用微服务的必需组件,方便开发者通过Spring Cloud编程模型轻松使用这些组件来开发分布式应用服务。

Spring Cloud Alibaba项目由两部分组成:阿里云产品组件和阿里巴巴开源组件,它旨在为Java开发人员在使用阿里巴巴产品的同时,通过利用Spring框架的设计模式和抽象能力,注入Spring Boot和Spring Cloud的优势。

请注意版本问题,Spring Cloud Alibaba项目的版本号格式为x.x.x的形式,其中x的数值类型为数字,从0开始取值,且不限于0~9这个范围。项目处于孵化器阶段时,第一位版本号固定使用0,即版本号为0.x.x的格式。而由于Spring Boot2和Spring Boot1在Actuator模块的接口和注解上有很大变化,且spring-cloud-commons从1.x.x版本升级到2.0.0版本也有较大的变化,因此Spring Cloud Alibaba采取跟SpringBoot版本号一致的版本,也就是1.5.x版本适用于Spring Boot 1.5.x版本;2.2.x版本适用于Spring Boot 2.2.x版本。可以发现这里Spring Cloud Alibaba的版本最新为2.2.3,因此笔者这里主要使用的Spring Boot版本为2.2.10,因为nacos对版本有要求:

阿里云产品组件

首先明确阿里云产品组件的命名前缀为spring-cloud-alicloud,其次它目前主要提供以下3个特性:
(1)应用发现服务。阿里云应用发现服务ANS,除了应用发现的基本功能外,提供了更低成本的 SaaS 化应用发现服务,同时在接口的调用中加入了加密逻辑,更好地保护你的服务。
(2)配置管理服务。阿里云配置管理服务ACM,加强了安全的配置管理,并且还包含了完整的推送轨迹查询。
(3)对象存储服务。阿里云云存储服务OSS,支持在任何应用、任何时间、任何地点存储和访问任意类型的数据, 只需要自动注入一个 OSS Client,即可直接使用存储与下载功能。

需要说明的是这个阿里云产品组件都是商业服务,需要付费,不是开源产品,因此我们更多的则是关注下面即将介绍的阿里巴巴开源组件。

阿里巴巴开源组件内容

(1)**Sentinel:把流量作为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。中文文档点击 这里
(2)
Nacos:一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。
(3)
RocketMQ:一款开源的分布式消息系统,基于高可用分布式集群技术,提供低延时的、高可靠的消息发布与订阅服务。
(4)
Dubbo:Apache Dubbo是一款高性能 Java RPC 框架。中文官网点击 这里
(5)
Seata:阿里巴巴开源产品,一个易于使用的高性能微服务分布式事务解决方案。
(6)
Alibaba Cloud OSS: 阿里云对象存储服务(Object Storage Service,简称 OSS),是阿里云提供的海量、安全、低成本、高可靠的云存储服务。您可以在任何应用、任何时间、任何地点存储和访问任意类型的数据。
(7)
Alibaba Cloud SchedulerX: 阿里中间件团队开发的一款分布式任务调度产品,提供秒级、精准、高可靠、高可用的定时(基于 Cron 表达式)任务调度服务。
(8)
Alibaba Cloud SMS**: 覆盖全球的短信服务,友好、高效、智能的互联化通讯能力,帮助企业迅速搭建客户触达通道。

阿里巴巴开源组件主要功能

首先明确阿里巴巴开源组件的命名前缀为spring-cloud-alibaba,其次它目前主要提供以下8个功能:
(1)服务注册与发现。适配Spring Cloud服务注册与发现标准,默认集成了Ribbon的支持。
(2)服务限流降级。默认支持 WebServlet、WebFlux、OpenFeign、RestTemplate、Spring Cloud Gateway, Zuul、Dubbo和RocketMQ限流降级功能的接入,可以在运行时通过控制台实时修改限流降级规则,还支持查看限流降级Metrics监控。
(3)分布式配置管理。支持分布式系统中的外部化配置,配置更改时自动刷新。
(4)消息驱动能力。基于Spring Cloud Stream为微服务应用构建消息驱动能力。
(5)分布式事务。使用 @GlobalTransactional注解, 高效并且对业务零侵入地解决分布式事务问题。
(6)阿里云对象存储。阿里云提供的海量、安全、低成本、高可靠的云存储服务。支持在任何应用、任何时间、任何地点存储和访问任意类型的数据。
(7)分布式任务调度。提供秒级、精准、高可靠、高可用的定时(基于Cron表达式)任务调度服务。同时提供分布式的任务执行模型,如网格任务。网格任务支持海量子任务均匀分配到所有Worker(schedulerx-client)上执行。
(8)阿里云短信服务。覆盖全球的短信服务,友好、高效、智能的互联化通讯能力,帮助企业迅速搭建客户触达通道。

如何构建使用

首先点击 这里,查看对应的中文文档,其实本文很多内容就摘自该文档,如下所示:

(1)master分支对应的是Spring Cloud Greenwich,最低支持JDK1.8;
(2)finchley分支对应的是Spring Cloud Finchley,最低支持JDK1.8。
(3)1.x分支对应的是Spring Cloud Edgware,最低支持JDK 1.7。

可以发现这里支持的版本明显比之前在学习Spring Cloud组件时使用的版本要低很多,在前面我们使用的是Hoxton.SR7版本,这个版本在笔者写这套笔记的时候已经不是最新的了,而这里的Spring Cloud Alibaba要求的版本最高还是Greenwich,也就是前面所说Spring Boot的版本要求大于等于2.2.0.RELEASE但是要小于2.3.0.M1。

Spring Cloud 使用Maven来构建,最快的使用方式是将spring-cloud-alibaba项目克隆到本地,然后执行./mvnw install命令即可将项目安装到本地Maven仓库中。

如何引入依赖

之前在使用Spring Cloud技术栈的时候我们都是在pom.xml依赖文件中使用了如下的配置:

1
2
3
4
5
6
7
8
9
10
11
<dependencyManagement>
<dependencies>
<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>

现在开发者如果需要使用已发布的Spring Cloud Alibaba版本,可以在dependencyManagement中添加如下配置:

1
2
3
4
5
6
7
8
9
10
11
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2.2.3.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>

然后在dependencies中添加自己所需使用的依赖即可使用,将允许开发者省略任何Maven依赖项的版本,而是将版本控制委派给BOM。

最后没事可以多点击 这里 学习Spring Cloud Alibaba组件更多内容。