簡介
SpringCloud Alibaba是阿里巴巴集團開源的一套微服務架構解決方案。
微服務架構是為了更好的分布式系統開發,將一個應用拆分成多個子應用,每一個服務都是可以獨立運行的子工程。其中涵蓋了非常多的內容,包括:服務治理、配置管理、限流降級以及對阿里開源生態(Dubbo、RocketMQ等)支持的N多組件。
SpringCloud Alibaba相關組件
- Sentinel:阿里巴巴開源產品,把流量作為切入點,從流量控制、熔斷降級、系統負載保護等多個維度保護服務的穩定性。
- Nacos:阿里巴巴開源產品,一個更易於構建雲原生應用的動態服務發現、配置管理和服務管理平台。
- RocketMQ:Apache RocketMQ™ 基於 Java 的高性能、高吞吐量的分布式消息和流計算平台。
- Dubbo:Apache Dubbo™ 是一款高性能 Java RPC 框架。
- Seata:阿里巴巴開源產品,一個易於使用的高性能微服務分布式事務解決方案。
- Alibaba Cloud ACM:一款在分布式架構環境中對應用配置進行集中管理和推送的應用配置中心產品。
- Alibaba Cloud OSS: 阿里雲對象存儲服務(Object Storage Service,簡稱 OSS),是阿里雲提供的海量、安全、低成本、高可靠的雲存儲服務。您可以在任何應用、任何時間、任何地點存儲和訪問任意類型的數據。
- Alibaba Cloud SchedulerX: 阿里中間件團隊開發的一款分布式任務調度產品,提供秒級、精准、高可靠、高可用的定時(基於 Cron 表達式)任務調度服務。
- Alibaba Cloud SMS: 覆蓋全球的短信服務,友好、高效、智能的互聯化通訊能力,幫助企業迅速搭建客戶觸達通道。
主要功能
- 服務限流降級:默認支持 WebServlet、WebFlux, OpenFeign、RestTemplate、Spring Cloud Gateway, Zuul, Dubbo 和 RocketMQ 限流降級功能的接入,可以在運行時通過控制台實時修改限流降級規則,還支持查看限流降級 Metrics 監控。
- 服務注冊與發現:適配 Spring Cloud 服務注冊與發現標准,默認集成了 Ribbon 的支持。
- 分布式配置管理:支持分布式系統中的外部化配置,配置更改時自動刷新。
- 消息驅動能力:基於 Spring Cloud Stream 為微服務應用構建消息驅動能力。
- 分布式事務:使用 @GlobalTransactional 注解, 高效並且對業務零侵入地解決分布式事務問題。。
- 阿里雲對象存儲:阿里雲提供的海量、安全、低成本、高可靠的雲存儲服務。支持在任何應用、任何時間、任何地點存儲和訪問任意類型的數據。
- 分布式任務調度:提供秒級、精准、高可靠、高可用的定時(基於 Cron 表達式)任務調度服務。同時提供分布式的任務執行模型,如網格任務。網格任務支持海量子任務均勻分配到所有 Worker(schedulerx-client)上執行。
- 阿里雲短信服務:覆蓋全球的短信服務,友好、高效、智能的互聯化通訊能力,幫助企業迅速搭建客戶觸達通道。
組件版本關系
Spring Cloud Alibaba Version | Sentinel Version | Nacos Version | RocketMQ Version | Dubbo Version | Seata Version |
---|---|---|---|---|---|
2.2.6.RELEASE | 1.8.1 | 1.4.2 | 4.4.0 | 2.7.8 | 1.3.0 |
2021.1 or 2.2.5.RELEASE or 2.1.4.RELEASE or 2.0.4.RELEASE | 1.8.0 | 1.4.1 | 4.4.0 | 2.7.8 | 1.3.0 |
2.2.3.RELEASE or 2.1.3.RELEASE or 2.0.3.RELEASE | 1.8.0 | 1.3.3 | 4.4.0 | 2.7.8 | 1.3.0 |
2.2.1.RELEASE or 2.1.2.RELEASE or 2.0.2.RELEASE | 1.7.1 | 1.2.1 | 4.4.0 | 2.7.6 | 1.2.0 |
2.2.0.RELEASE | 1.7.1 | 1.1.4 | 4.4.0 | 2.7.4.1 | 1.0.0 |
2.1.1.RELEASE or 2.0.1.RELEASE or 1.5.1.RELEASE | 1.7.0 | 1.1.4 | 4.4.0 | 2.7.3 | 0.9.0 |
2.1.0.RELEASE or 2.0.0.RELEASE or 1.5.0.RELEASE | 1.6.3 | 1.1.1 | 4.4.0 | 2.7.3 | 0.7.1 |
畢業版本依賴關系
Spring Cloud Version | Spring Cloud Alibaba Version | Spring Boot Version |
---|---|---|
Spring Cloud 2020.0.1 | 2021.1 | 2.4.2 |
Spring Cloud Hoxton.SR9 | 2.2.6.RELEASE | 2.3.2.RELEASE |
Spring Cloud Greenwich.SR6 | 2.1.4.RELEASE | 2.1.13.RELEASE |
Spring Cloud Hoxton.SR3 | 2.2.1.RELEASE | 2.2.5.RELEASE |
Spring Cloud Hoxton.RELEASE | 2.2.0.RELEASE | 2.2.X.RELEASE |
Spring Cloud Greenwich | 2.1.2.RELEASE | 2.1.X.RELEASE |
Spring Cloud Finchley | 2.0.4.RELEASE(停止維護,建議升級) | 2.0.X.RELEASE |
Spring Cloud Edgware | 1.5.1.RELEASE(停止維護,建議升級) | 1.5.X.RELEASE |
官方版本關系說明文檔: https://github.com/alibaba/spring-cloud-alibaba/wiki/%E7%89%88%E6%9C%AC%E8%AF%B4%E6%98%8E
工程准備
依賴管理工程(spring-cloud-alibaba-version-parent)
創建該pom工程主要用於管理依賴使用的版本。
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<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.gitee</groupId>
<artifactId>spring-cloud-alibaba-version-parent</artifactId>
<version>0.0.1</version>
<properties>
<!-- 編碼與JDK版本 -->
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<!-- SpringBoot SpringCloud Spring Cloud Alibaba 三件套 -->
<spring.boot.version>2.5.2</spring.boot.version>
<spring.cloud.version>2020.0.3</spring.cloud.version>
<spring.cloud.alibaba.version>2021.1</spring.cloud.alibaba.version>
<!-- JSON 轉換依賴 -->
<fastjson.version>1.2.78</fastjson.version>
<!-- 工具包 -->
<hutool.version>5.7.3</hutool.version>
<mapstruct.version>1.2.0.Final</mapstruct.version>
<lombok.version>1.18.20</lombok.version>
<!-- Swagger -->
<springfox.boot.starter.version>3.0.0</springfox.boot.starter.version>
</properties>
<!-- 開發人員 -->
<developers>
<developer>
<name>wuwentao</name>
<email>lovelyWu98k@gmail.com</email>
</developer>
</developers>
<!-- 引入依賴管理 -->
<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>
<!-- spring cloud alibaba 依賴 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>${spring.cloud.alibaba.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<!-- 構建方式 -->
<build>
<finalName>${project.name}</finalName>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
<!-- 打包插件管理 -->
<pluginManagement>
<plugins>
<!-- Spring Boot 打包插件 -->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>${spring.boot.version}</version>
<configuration>
<finalName>${project.build.finalName}</finalName>
<layers>
<enabled>true</enabled>
</layers>
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</pluginManagement>
</build>
</project>
服務公共依賴工程(spring-cloud-alibaba-common)
創建該jar工程主要用於存放業務服務公用的內容,如統一響應實體,統一異常處理等等。
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<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>
<parent>
<groupId>com.gitee</groupId>
<artifactId>spring-cloud-alibaba-version-parent</artifactId>
<version>0.0.1</version>
</parent>
<groupId>com.gitee</groupId>
<artifactId>spring-cloud-alibaba-common</artifactId>
<version>0.0.1</version>
<dependencies>
<!-- 工具依賴 -->
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>${hutool.version}</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
</dependency>
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-jdk8</artifactId>
<version>${mapstruct.version}</version>
</dependency>
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
<version>${mapstruct.version}</version>
</dependency>
<!-- fastjson 序列化 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>${fastjson.version}</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.20</version>
<scope>provided</scope>
</dependency>
<!-- 引用Swagger類 -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-boot-starter</artifactId>
<version>${springfox.boot.starter.version}</version>
<scope>provided</scope>
</dependency>
</dependencies>
</project>
請求統一響應返回類定義
創建該類用於Controller處理完成后返回給前端或調用放的返回值對象。
Response.java
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* 請求統一響應實體類
*
* @param <T> 返回結果類型
* @author wentao.wu
*/
@Data
@ApiModel(value = "請求響應實體類")
public class Response<T> {
@ApiModelProperty(value = "請求成功響應編碼")
private String code;
@ApiModelProperty(value = "請求成功響應消息")
private String msg;
@ApiModelProperty(value = "請求失敗響應編碼")
private String errorCode;
@ApiModelProperty(value = "請求失敗響應消息")
private String errorMsg;
@ApiModelProperty(value = "返回結果")
private T result;
}
統一業務服務異常定義
創建該類主要用戶識別,發生該異常是由業務服務拋出,后期可以做全局異常統一處理。
ServiceException.java
import lombok.Getter;
/**
* 服務業務運行時異常
*
* @author wentao.wu
*/
@Getter
public class ServiceException extends RuntimeException {
public ServiceException(String errorCode, String errorMsg) {
super();
this.errorCode = errorCode;
this.errorMsg = errorMsg;
}
/**
* 異常編碼
*/
private String errorCode;
/**
* 異常信息
*/
private String errorMsg;
}
注意事項
后期所有工程都依賴上方兩個工程。
目錄
標題 | 傳送門 |
---|---|
Nacos Server 介紹安裝部署篇 | 未更新 |
Sentinle Server 介紹安裝部署篇 | 未更新 |
Seata Server 介紹安裝部署篇 | 未更新 |
RocketMQ Server 介紹安裝部署篇 | 未更新 |
SkyWalking 介紹安裝部署篇 | 未更新 |
Spring Cloud Alibaba 介紹及工程准備 | 前往 |
Spring Cloud Alibaba 使用Nacos作為服務注冊中心 | 前往 |
Spring Cloud Alibaba 使用Nacos作為配置管理中心 | 前往 |
Spring Cloud Alibaba 使用RestTemplate進行服務消費 | 前往 |
Spring Cloud Alibaba 使用Feign進行服務消費 | 前往 |
Spring Cloud Alibaba 使用Seata解決分布式事務 | 前往 |
Spring Cloud Alibaba 使用Gateway作為服務網關 | 前往 |
Spring Cloud Alibaba 使用Sentinel進行熔斷&降級 | 前往 |
Spring Cloud Alibaba 使用SkyWalking進行分布式鏈路跟蹤 | 前往 |
Spring Cloud Alibaba 使用RocketMQ進行消息生產 | 前往 |
Spring Cloud Alibaba 使用RocketMQ進行消息消費 | 前往 |
持續更新中.... | 持續更新 |
源碼代碼存放地址
gitee: https://gitee.com/SimpleWu/spring-cloud-alibaba-example.git
cnblogs: https://www.cnblogs.com/SimpleWu