Skip to content
🗂️ 文章分类: 后端  微服务  
🏷️ 文章标签: SpringCloudAlibaba  
📝 文章创建时间: 2022-07-26
🔥 文章最后更新时间:暂无

[toc]

Spring Cloud Alibaba笔记-版本2.2.8

介绍

SpringCloud 是什么?

Spring Cloud 本身并不是一个开箱即用的框架,它是一套微服务规范。它集合了一整套解决微服务问题的工具集,从而让用户不需要关心技术整合的问题。

Spring Cloud 共有两代实现。

  • Spring Cloud Netflix 是 Spring Cloud 的第一代实现,主要由 Eureka、Ribbon、Feign、Hystrix 等组件组成。
  • Spring Cloud Alibaba 是 Spring Cloud 的第二代实现,主要由 Nacos、Sentinel、Seata 等组件组成。

Spring Cloud Alibaba 是什么?

Spring Cloud Alibaba 是阿里巴巴结合自身丰富的微服务实践,在Spring Cloud的基础上推出的微服务开发的一站式解决方案。

它提供了一套简单易用的编程模型,使我们能在 Spring Cloud的基础上轻松地实现微服务系统的构建。

自 Spring Cloud Netflix 进入停更维护后,Spring Cloud Alibaba 逐渐代替它成为主流的微服务框架。

Spring Cloud Alibaba 与 Spring Cloud Netflix 的区别?

它们都是在Spring Cloud的基础上进行了扩展,但是它们在组件上的选择还是比较大的。

组件上的区别SpringCloudSpringCloudAlibaba
注册中心Eureka、ConsulNacos
配置中心SpringCloud ConfigNacos
网关SpringCloud ZuulSpringCloud Gateway
负载均衡RibbonLoadbalancer
熔断降级HystrixSentinel
服务调用FeignOpenFeign

下图是微服务架构图 20220728161129.png

三者依赖版本说明

注意:在使用SpringCloudAlibaba搭建微服务工程的时候,要注意SpringCloudAlibaba,SpringCloud,SpringBoot三者的版本。不要各自使用最新的版本,否则会出现版本不兼容导致的各个问题。

目前三者之间推荐的版本搭配

Spring Cloud Alibaba VersionSpring Cloud VersionSpring Boot Version
2.2.8.RELEASESpring Cloud Hoxton.SR122.3.12.RELEASE

目前SpringCloudAlibaba 2.2.8 版本中各个微服务组件的版本搭配

Spring Cloud Alibaba VersionSentinel VersionNacos VersionRocketMQ VersionSeata Version
2.2.8.RELEASE1.8.42.1.04.9.31.5.1

SpringCloudAlibaba 微服务项目的搭建

搭建 SpringCloudAlibaba 微服务项目,该项目采用的架构模式为模块化单体架构。

整个工程采用maven的父子工程的方式进行搭建。并让maven的父子工程形成继承和聚合的关系。具体参考maven笔记。

开发工具使用的是IDEA

创建一个空的maven父工程

① 先创建一个空的maven父工程

由于是空的父工程,可以不使用maven的模板骨架来创建。直接创建一个空的java工程,构建工具选择maven即可。

shuyxadminservices_20250930103910343.png

② 删除父工程中不必要的文件和目录,只保留pom.xml和.gitignore文件

shuyxadminservices_20250928144532944.png

注意事项

  • .idea目录是IDEA默认生成的项目配置目录,可忽略。
  • .gitignore文件是git版本控制忽略文件,可根据需要自定义。注意需要将.idea目录添加到.gitignore文件中,避免将.idea目录提交到代码远程仓库中。
  • pom.xml文件是maven项目的配置文件,需要根据项目需求进行配置。

为什么要让父工程是空的?

父工程的主要作用是为后续的子工程提供Maven依赖的统一管理,起到版本管理器的作用。

例如我们可以通过父工程,让各个子工程的maven依赖的版本都是一样。并且由于我们不需要在父工程中编写代码,因此父工程可以是空的。

③ 修改父工程的pom文件

目前三者之间推荐的版本搭配

Spring Cloud Alibaba VersionSpring Cloud VersionSpring Boot Version
2.2.8.RELEASESpring Cloud Hoxton.SR122.3.12.RELEASE

修改要点

  • 设置父工程的相关信息
  • 添加packaging元素,设置父工程的打包方式为pom
  • 父工程的dependencies依赖会被子工程继承
  • 父工程的dependencyManagement依赖是可选的依赖,子工程可以选择继承或不继承。
  • 父工程添加spring-boot-maven-plugin插件来打包整个项目。

完整的父工程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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <!--父工程的相关信息-->
    <modelVersion>4.0.0</modelVersion>

    <!-- 父工程元数据-->
    <groupId>com.shuyx</groupId>
    <artifactId>shuyx-admin-services</artifactId>
    <version>1.0-SNAPSHOT</version>
    <!-- 父工程名称和描述 -->
    <name>shuyx-admin-services</name>
    <description>this is shuyx admin services system</description>
    <!--父工程的打包方式设置为pom-->
    <packaging>pom</packaging>

    <!--父工程 dependencies 依赖,此处配置公共依赖。会被子工程继承。-->
    <dependencies>
        <!-- 省略 -->
    </dependencies>

    <!--父工程统一对依赖进行管理,子工程的依赖都用父工程的-->
    <!--父工程 dependencyManagement 依赖,此处为可选依赖。子工程可以选择继承或不继承。 -->
    <dependencyManagement>
        <dependencies>
            <!-- Spring Boot 版本 -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-parent</artifactId>
                <version>2.3.12.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <!-- Spring Cloud 版本 -->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Hoxton.SR12</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <!-- Spring Cloud Alibaba 版本 -->
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>2.2.8.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <build>
        <plugins>
            <!--spring-boot-maven-plugin插件,可以将项目打包成可执行jar包。-->
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>2.7.17</version>
            </plugin>
            <!-- 编译插件,配置JDK版本为8 -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>8</source>
                    <target>8</target>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

创建子工程

在微服务项目中,一般是根据系统中的服务来拆分出子工程。每个子工程都是一个独立的功能模块,一个独立的服务。

① 在当前父工程下,创建一个模块。这个模块就是子工程。

springcloudalibaba_20250928165227546.pngspringcloudalibaba_20231112164448.pngspringcloudalibaba_20231112164657.png

例如图中的shuyx-user子工程。每个子工程都是一个Spring Boot工程。选择导入基本的Spring Web依赖即可。。注意此处springboot的版本可以随便选,后面修改为与父工程的版本一致即可。

② 删除子工程中不必要的目录文件。例如maven等文件

shuyxadminservices_20250928170322745.png

注意1:子工程只保留src目录和pom文件,其他目录文件都删除。

注意2:由于父工程是一个不具有业务功能的"空"工程(有且仅有一个pom文件,没有源代码文件)。因此无论是空的maven父工程还是空的springboot父工程。都是要删除不必要的文件,保留pom文件的。不必拘泥于什么类型的父工程。

③ 修改父工程的pom文件

给父工程的pom文件新增modules标签,让父子工程形成聚合关系。

xml
<!--父pom文件的modules标签,添加子工程shuyx-user-->
<modules>
    <module>shuyx-user</module>
</modules>

④ 修改子工程的pom文件,添加父工程的依赖。

修改要点

  • 更换parent标签,替换为现在的父工程
  • 删除不必要的标签。
  • 添加packaging标签:如果子工程需要打出jar包,那么可以设置packaging标签。如果子工程不需要打包,那么可以不添加packaging标签。

modules标签和parent标签

modules标签和parent标签,会让父工程与子工程形成一种继承和聚合的关系。

  • maven中的继承关系:会让子工程自动继承父工程的依赖。
  • maven中的聚合关系:可以让父工程批量管理子工程。例如对父工程进行编译,则相当于对所有的子工程进行编译。

注意:只有在父子工程都是maven工程的情况下,才会自动添加modules和parent标签。如果不是,则需要手动添加modules和parent标签才行。

完整的子工程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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <!--更换parent标签,替换为现在的父工程-->
	<parent>
		<artifactId>shuyx-admin-services</artifactId>
		<groupId>com.shuyx</groupId>
		<version>1.0-SNAPSHOT</version>
	</parent>

    <!--子工程的相关信息-->
    <artifactId>shuyx-user</artifactId>
    <version>1.0-SNAPSHOT</version>  <!--版本与父工程保持一致,避免版本混乱-->
    <name>shuyx-user</name>
    <description>shuyx-user</description>

    <!--子工程的打包方式-->
    <packaging>jar</packaging>

    <!--子工程使用的依赖,不用写版本,版本自动继承自父工程的版本-->
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>
    
    <!-- 子工程中自动继承父工程的插件。因此插件配置可写可不写 -->
</project>

总结

创建完父工程和子工程后,就可以开始根据业务需求编写代码了。

不同的子工程实现的业务代码不同,因此各个子工程需要导入的依赖也不相同。我们可以将各个子工程中的公共依赖导入到父工程中,通过父工程来管理公共依赖的版本。

另外,各个子工程需要导入的微服务组件也不相同。具体各个微服务组件的使用方式参考其他文章。

Released under the MIT License.