(一)Spring Cloud Alibaba 2023.x:快速构建微服务项目

1,254 阅读4分钟

前言

在学习和使用 Spring Cloud Alibaba 的过程中,我发现市面上很少有适合新手的详细系列教程,特别是针对 最新版本(2023.x) 的完整集成与实战案例 , 这对于初学者来说,无疑增加了入门难度 。

这系列博客源于我的亲身实践和问题排查经验,将带你从零开始学习 Spring Cloud Alibaba,逐步掌握各组件的使用与集成,无论是 服务注册与发现负载均衡分布式事务,还是 限流降级消息队列配置中心 等核心功能,都提供了详尽的解析和代码示例 !

至于为什么要学习Spring Cloud Alibaba而不是Spring Cloud, 能看到这个系列我想大家多多少少都对比过,Spring Cloud对于国内用户上手难,没有完善的社区和文档,相关组件不再维护...这里不再多说直接开始。

准备

  • jdk17+
  • maven3.9.4+
  • idea2023

源码获取:GitHub - RemainderTime/spring-cloud-alibaba-base-demo: 基于spring cloud alibaba生态快速构建微服务脚手架

初始化项目

构建微服务

微服务中每个独立的模块,大致为两个角色生产者或者消费者,就如后面的服务之间的远程调用或者是MQ消息队列的生成和消费也是如此。

所以这里创建两个微服务项目:

  1. http-cloud-producer
  2. http-cloud-consumer

idea创建时选择3.3.x的版本,尽量和博主一直,避免后续不必要的版本冲突

导入依赖

我们可以直接访问spring cloud alibaba的github地址,上面也有简约的版本说明:spring-cloud-alibaba/README-zh.md at 2023.x · alibaba/spring-cloud-alibaba

这里博主版本选择为:

  • spring cloud : 2023.0.1
  • spirng cloud alibaba : 2023.0.1.0
  • spirng boot : 3.3.5

提示

搜索maven仓库我们可知,截止到目前alibaba的最新版本已经更新到2023.3.2了

之所以选择的不是最新版本,因为官网既然已经给出了版本要求,那么要求版本中最开始的版本一定是对所有组件都支持的,但是后续更新的版本存在其他组件可能没有那么及时的适配,会出现意想不到的版本问题(这也是博主不停地试错得到的最佳版本配置)。

父级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>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>3.3.5</version>
    <relativePath/> <!-- lookup parent from repository -->
  </parent>
  <groupId>com.xf</groupId>
  <artifactId>spring-cloud-alibaba-base-demo</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <name>spring-cloud-alibaba-base-demo</name>
  <description>spring-cloud-alibaba-base-demo</description>
  <packaging>pom</packaging> <!-- 父模块的打包方式 -->
  <url/>
  <properties>
    <java.version>17</java.version>
  </properties>
  <!-- 引入子模块管理-->
  <modules>
    <module>http-cloud-producer</module>
    <module>http-cloud-consumer</module>
  </modules>
  <dependencyManagement>
    <dependencies>
      <!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-dependencies -->
      <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-dependencies</artifactId>
        <version>2023.0.1</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>
      <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-alibaba-dependencies</artifactId>
        <version>2023.0.1.0</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>
    </dependencies>
  </dependencyManagement>
  <dependencies>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter</artifactId>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-test</artifactId>
      <scope>test</scope>
    </dependency>
    <repositories>
      <repository>
        <id>alimaven</id>
        <url>https://maven.aliyun.com/repository/public</url>
      </repository>
    </repositories>
    <build>
      <pluginManagement>
        <plugins>
          <!-- 编译插件 -->
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.11.0</version>
            <configuration>
              <source>17</source>
              <target>17</target>
            </configuration>
          </plugin>
          <!-- Spring Boot 打包插件 -->
          <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
                    <version>3.1.2</version>
                </plugin>
            </plugins>
        </pluginManagement>
    </build>

</project>

修改子模块pom.xml中内容

因为子模块创建时默认的里面是springboot的依赖版本,微服务项目所以子模块需要交给父级pom.xml进行依赖版本控制,所以修改为父级项目依赖包:

<parent>
  <groupId>com.xf</groupId> <!-- 对应父模块的 groupId -->
  <artifactId>spring-cloud-alibaba-base-demo</artifactId> <!-- 对应父模块的 artifactId -->
  <version>0.0.1-SNAPSHOT</version> <!-- 对应父模块的版本 -->
  <relativePath>../pom.xml</relativePath> <!-- 父模块的位置 -->
</parent>

对于父级的pom.xml相关标签的解释:

顶级标签 :对系列相关依赖组件统一版本控制管理,在后续系列组件依赖引入不用写版本号。如:spring cloud、spring cloud alibaba

顶级标签 :在父级中引入依赖后,所有子模块不用单独引入依赖,自动加载到子模块中,但要满足所有子模块需要才引入,如果某些模块不需要,建议每个需要的模块单独引入依赖

为什么使用了spring cloud alibaba 依赖还有引入spring cloud的依赖呢?

因为不是所有的spring cloud alibaba提供的组件都合适所有场景以及也不是所有spring cloud的组件都不友好,是为了在微服务开发中实现优势互补。如alibaba Higress 更像是一个为 Kubernetes 而生的企业级云原生网关,适合复杂的云原生场景;而 Spring Cloud Gateway 则以其简单易用和 Spring 生态兼容性为优势,更适合中小型项目或需要快速交付的场景。

application.yml配置文件

修改配置文件后缀yml格式

对每个子模块设置不同的端口以及项目名就可以启动项目了

server:
  port: 9091
management:
  endpoints:
    web:
      exposure:
        include: "*"

spring:
  application:
    name: http-cloud-producer


至此spring cloud alibaba微服务项目初始化构建完成了。