前言
在学习和使用 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消息队列的生成和消费也是如此。
所以这里创建两个微服务项目:
- http-cloud-producer
- 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 代码解读复制代码"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.0modelVersion>
<parent>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-parentartifactId>
<version>3.3.5version>
<relativePath/>
parent>
<groupId>com.xfgroupId>
<artifactId>spring-cloud-alibaba-base-demoartifactId>
<version>0.0.1-SNAPSHOTversion>
<name>spring-cloud-alibaba-base-demoname>
<description>spring-cloud-alibaba-base-demodescription>
<packaging>pompackaging>
<url/>
<properties>
<java.version>17java.version>
properties>
<modules>
<module>http-cloud-producermodule>
<module>http-cloud-consumermodule>
modules>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-dependenciesartifactId>
<version>2023.0.1version>
<type>pomtype>
<scope>importscope>
dependency>
<dependency>
<groupId>com.alibaba.cloudgroupId>
<artifactId>spring-cloud-alibaba-dependenciesartifactId>
<version>2023.0.1.0version>
<type>pomtype>
<scope>importscope>
dependency>
dependencies>
dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starterartifactId>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-testartifactId>
<scope>testscope>
dependency>
<repositories>
<repository>
<id>alimavenid>
<url>https://maven.aliyun.com/repository/publicurl>
repository>
repositories>
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.pluginsgroupId>
<artifactId>maven-compiler-pluginartifactId>
<version>3.11.0version>
<configuration>
<source>17source>
<target>17target>
configuration>
plugin>
<plugin>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-maven-pluginartifactId>
<version>3.1.2version>
plugin>
plugins>
pluginManagement>
build>
project>
修改子模块pom.xml中内容
因为子模块创建时默认的里面是springboot的依赖版本,微服务项目所以子模块需要交给父级pom.xml进行依赖版本控制,所以修改为父级项目依赖包:
xml 代码解读复制代码<parent>
<groupId>com.xfgroupId>
<artifactId>spring-cloud-alibaba-base-demoartifactId>
<version>0.0.1-SNAPSHOTversion>
<relativePath>../pom.xmlrelativePath>
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格式
对每个子模块设置不同的端口以及项目名就可以启动项目了
yml 代码解读复制代码server:
port: 9091
management:
endpoints:
web:
exposure:
include: "*"
spring:
application:
name: http-cloud-producer
至此spring cloud alibaba微服务项目初始化构建完成了。
评论记录:
回复评论: