SpringCloud = 分布式微服务架构的一站式解决方案,是多种微服务架构技术的集合体,俗称微服务全家桶。
SpringCloud Alibaba 和 SpringCloud 和 SpringBoot 的版本以及各组件版本兼容性选择请查看下面的版本说明:https://github.com/alibaba/spring-cloud-alibaba/wiki/版本说明
组件说明
SpringCloud 的组件有很多,在学习的时候需要抓住重点,并不是所有组件在一个项目中都会用到,很多时候我们需要的只是其中必要的部分,有了这些必要的东西就能完成所需要的功能。
Netflix 在 SpringCloud 项目中占着重要的地位,Netflix 公司提供了包括 Eureka、Hystrix、Zuul 等在内的很多组件,在微服务架构中至关重要,而 Spring 在 Netflix 的基础上,进一步封装了这些组件。但是因为一些原因,Netflix 提供的很多组件已不再维护,但并不是不能用了,所以还是需要学习其中的思想,而替代它们的新组件也要进行学习。
具体哪些常用的组件已不维护,替代它们的又有哪些,可以查看下面的列表。
- 服务注册中心
- × Eureka
- √ Zookeeper
- √ Consul
- √ Nacos
- 服务调用
- √ Ribbon
- √ LoadBalancer
- × Feign
- √ OpenFeign
- 服务降级
- × Hystrix
- √ resilience4j
- √ sentienl
- 服务网关
- 服务配置
- 服务总线
父工程搭建
创建一个 Maven 工程,模板选择:maven-archetype-site。删除 src 文件夹。下面是 pom 配置文件。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94
| <?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 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion>
<groupId>ml.guest997</groupId> <artifactId>SpringCloud</artifactId> <version>1.0-SNAPSHOT</version> <packaging>pom</packaging>
<properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> <junit.version>5.8.2</junit.version> <log4j.version>2.17.2</log4j.version> <lombok.version>1.18.22</lombok.version> <mysql.version>8.0.28</mysql.version> <druid.spring.boot.version>1.2.8</druid.spring.boot.version> <mybatis.spring.boot.version>2.2.2</mybatis.spring.boot.version> </properties>
<dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>2.6.3</version> <type>pom</type> <scope>import</scope> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>2021.0.1</version> <type>pom</type> <scope>import</scope> </dependency> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-alibaba-dependencies</artifactId> <version>2021.0.1.0</version> <type>pom</type> <scope>import</scope> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>${mysql.version}</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>${druid.spring.boot.version}</version> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>${mybatis.spring.boot.version}</version> </dependency> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-api</artifactId> <version>${junit.version}</version> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> <version>${log4j.version}</version> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>${lombok.version}</version> <optional>true</optional> </dependency> </dependencies> </dependencyManagement>
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <fork>true</fork> <addResources>true</addResources> </configuration> </plugin> </plugins> </build>
</project>
|
packing 标签只是为了聚合工程或传递依赖用的。
dependencyManagement 标签提供了一种管理依赖版本号的方式。通常会在项目的最顶层的父 pom 中看到。这样做的好处就是:如果有多个子项目都引用同一样依赖,则可以避免在每个使用的子项目里都声明一个版本号,这样当想升级或切换到另一个版本时,只需要在父 pom 中进行修改,而不需要一个个的子项目中进行修改;另外如果某个子项目需要另外的一个版本,只需要在其 pom 中声明其它版本即可。dependencyManagement 只是声明依赖,并不实现引入,因此子项目需要显式地声明需要用的依赖。