SpringCloud是基于Spring构建的一个能够快速搭建分布式微服务的全套框架,SpringCloud生态最初是依托于美国网飞公司(Netflix)开源的一系列组件(Eureka、Ribbon、Feign、Hystrix等)构建的,但随着技术的发展SpringCloud的生态逐渐丰富了起来,许多其它开源组件或能够与云厂商的商业组件集成的模块也加入了SpringCloud之中,如今在SpringCloud平台下针对微服务治理的方方面面我们都可能有不止一个选择。
其中,国内的阿里也推出了SpringCloudAlibaba,其中包括Nacos、Sentinel、Seata等开源组件广受国内开发者的欢迎。SpringCloudAlibaba也是国内首个进入Spring社区的开源项目。2018年7月,SpringCloudAlibaba正式开源,并进入 SpringCloud孵化器中孵化;2019年7月,SpringCloud官方宣布SpringCloudAlibaba毕业。
本系列笔记主要介绍SpringCloudAlibaba中关于服务发现、服务治理和分布式事务的对应解决方案。
官方文档:https://sca.aliyun.com/zh-cn/
SpringCloudAlibaba是阿里结合自身丰富的微服务实践而推出的微服务开发一站式解决方案,它包含开发分布式应用服务的一些重要组件,方便开发者通过SpringCloud编程模型轻松使用这些组件来开发分布式应用服务。依托SpringCloudAlibaba,开发者只需要添加一些注解和少量配置,就可以将SpringCloud应用接入阿里分布式应用解决方案,通过阿里中间件来迅速搭建分布式应用系统。
SpringCloudAlibaba包含很多实用的组件,其中一些是完全开源的,一些则是需要对接到阿里云平台使用的商业组件。
Nacos:Nacos是阿里开源的服务注册中心和分布式配置中心,支持CP+AP模式,它提供了一个可视化界面用于管理服务和配置,功能可以平替Consul。
Sentinel:Sentinel是阿里开源的服务流量控制组件,Sentinel支持通过规则可视化配置方式实现服务限流、隔离、熔断、降级等功能,使用简便直观,不过该项目开源版本质量较差,使用坑点多、文档语焉不详,不是特别推荐使用。在SpringCloud中,比较推荐的方案还是Resilience4j。
Seata:Seata是阿里开源的分布式事务解决方案,目前也是国内分布式事务的主流方案。
RocketMQ:RocketMQ是阿里开源的高性能消息中间件,在国内广泛使用,SpringCloudAlibaba提供了能够集成RocketMQ实现消息机制和事件总线的方案。
Dubbo:Dubbo是阿里开源的高性能RPC框架,在国内非常流行,不过曾经停更过一段时间,但后来又重新开始更新,现在还能与SpringCloudAlibaba生态良好集成,不过目前RPC的主流方案是OpenFeign,使用HTTP和JSON作为RPC的通信方案有很多优势这里不再赘述,现在选型Dubbo的项目不多了。
SpringBoot的版本目前主流有3个,即:SpringBoot3.0、SpringBoot2.7~2.4和SpringBoot2.4以下,这3个版本之间的API变化较大,SpringCloudAlibaba目前也是分为2022.x、2021.x和2.2.x三个分支进行迭代,具体搭建工程前,我们需要根据官方文档的说明选择合适的版本。
版本说明文档:https://github.com/alibaba/spring-cloud-alibaba/wiki/%E7%89%88%E6%9C%AC%E8%AF%B4%E6%98%8E
搭建SpringCloudAlibaba工程非常简单,我们需要先创建一个SpringCloud工程,然后根据版本的对应关系引入合适版本的SpringCloudAlibaba依赖。我这里使用的是SpringBoot2.7.18、SpringCloud2021.0.8、SpringCloudAlibaba2021.0.5.0。在pom.xml
中,我们可以按照如下步骤进行配置。
在<properties>
中加入SpringCloudAlibaba版本属性配置:
<properties>
<java.version>1.8</java.version>
<spring-cloud.version>2021.0.8</spring-cloud.version>
<spring-cloud-alibaba.version>2021.0.5.0</spring-cloud-alibaba.version>
</properties>
在<dependencyManagement>
中,spring-cloud-dependencies
下方加入spring-cloud-alibaba-dependencies
内容:
<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>
<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>
此时我们就可以自由引入SpringCloudAlibaba的起步依赖了。