Spring Cloud Alibaba 搭建教程
概述
前面文章梳理了Spring Boot、Spring Cloud、Spring Cloud Alibaba各版本的对应关系 ,于是接着计划搭建一个完整的Spring Cloud Alibaba实例,正好梳理一下版本之间的关联情况,同时给初学者一个完整实例参考。
本文以开源项目mall4cloud为例来分析讲解Spring Cloud Alibaba项目,以下图所示是cloud alibaba相关组件,各组件的功能本文不做详细介绍,在后续文章中进行详细分析。

搭建过程
首先我们通过idea创建maven多模块项目,微服务项目一般都是先搭建父级项目,然后各微服务以模块化的方式进行管理,父级用来进行版本管理,如下所示:

这里通过maven <dependencyManagement> 元素,在父项目的 pom.xml 中集中管理依赖版本,从而避免子模块重复声明版本号,并确保所有模块使用一致的依赖版本。
大家可以看到核心依赖的版本,确定了核心依赖的版本,其他组件我们就需要找到对应匹配的版本才能兼容了。
<!– 核心依赖 –>
<spring-boot.version>2.7.7</spring-boot.version>
<spring-cloud.version>2021.0.5</spring-cloud.version>
<spring-cloud-alibaba.version>2021.0.4.0</spring-cloud-alibaba.version>
mall4cloud项目微服务比较多且业务比较丰富,本文是讲解组件搭建过程,这里只以gateway、auth、order、user这几个模块为例,对业务和技术使用细节感兴趣的可以去学习源码。
首先是网关gateway,这个模块是微服务架构中相对通用并且必须的服务,以下是网关中引入的maven依赖:
<!–注册中心客户端–>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>knife4j-openapi3-spring-boot-starter</artifactId>
</dependency>
<!–接口文档–>
<dependency>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-webflux-ui</artifactId>
</dependency>
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>knife4j-openapi3-ui</artifactId>
</dependency>
这些配置可以看出来比较常规,首先是nacos配置与注册中心的依赖,然后是gateway的依赖,另外是api文档的相关依赖,这里有两个特殊依赖loadbalancer,bootstrap,这两个依赖共同支持了 Spring Cloud 微服务架构中的配置管理和服务调用负载均衡两大核心功能。近期在思考Java 微服务项目结构的时候,有了一个“项目中一切皆代码”的感悟,微服务项目随着业务堆积以及研发人员的更替,项目中依赖越来越混乱,依赖的不同版本和同类依赖也堆积在项目中,然后做了一个去除无关依赖的事情,很多jar包是没有源码的,只能反编译来进行区分,这里相当于系统瘦身了,意义很大。
讲完gateway模块,至此cloud alibaba基础包也就都讲了,接下来讲一下业务相关的依赖,比如权限模块引入了:
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-crypto</artifactId>
</dependency>
这里使用的spring security,业务模块根据需要分别应用了一些中间件的依赖,系统中使用了rocketmq、seata、minio这些中间件服务,我们需要在相应的模块中应用依赖:
<dependency>
<groupId>org.apache.rocketmq</groupId>
<artifactId>rocketmq-spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>io.minio</groupId>
<artifactId>minio</artifactId>
</dependency>
<dependency>
<groupId>io.seata</groupId>
<artifactId>seata-spring-boot-starter</artifactId>
</dependency>
总结
本文和其他博客不同,我从依赖的方式来进分析了Spring Cloud Alibaba 搭建过程,正如前文提到“项目中一切皆代码”这一观点,我们从依赖的角度来理解项目感觉会不一样,严格管理依赖的引入以及版本的兼容性,我们研发的项目将可控性更强。




