【SpringCloudAlibaba系列】父工程搭建
1、微服务
什么是微服务?维基上简单定义:一种面向服务的体系结构(SOA)架构样式的一种变体,将单一应用程序划分一组小的服务,服务之间互相协调、配合。每个服务独立运行,服务之间采用轻量级通信机制相互沟通(通常基于http的restful api),每个服务独立部署,围绕具体业务进行构建,避免统一、集中式的服务管理机制,对具体的一个服务而言,根据上下文,选择合适的语言、工具对其进行构建。
微服务是一种用于构建应用的架构方案,微服务架构有别于传统的单体方案,将应用拆分为多个核心功能。每个功能都是一个服务,独立部署,各服务出现故障时不会互相影响。
2、SpringCloud介绍
Spring Cloud系列框架是有序集合,利用SpringBoot的开发便利性巧妙简化分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用springboot开放风格做到一键部署和启动。springcloud没有重复造轮子,只是将成熟的框架组合起来,通过springboot风格再封装屏蔽复杂的配置和实现原理,留给开发一套简单易懂、易部署、维护的分布式开放工具包。
3、SpringCloudAlibaba
springcloud中所有组件都使用Netflix公司产品,然后在基础上做了一层封装。然而Netflix的服务发现组件Eureka已经停止更新,并且里面存在细小bug,其他众多组件预计2020年停止维护,所以需要其他产品替代。
springcloud alibaba是springcloud下的子项目,为分布式应用程序提供一站式解决方案,包含开放分布式应用所有组件,开发时,只需添加一些注释和少量配置就可以将springcloud应用程序连接到alibaba分布式解决方案。
官方链接
官方自述:https://github.com/alibaba/spring-cloud-alibaba/blob/master/README-zh.md
官方github:https://github.com/alibaba/spring-cloud-alibaba
官方Samples:https://github.com/alibaba/spring-cloud-alibaba/tree/master/spring-cloud-alibaba-examples
版本兼容
SpringCloud和SpringBoot的版本兼容:
https://spring.io/projects/spring-cloud
SpringCloudAlibaba和SpringBoot的版本兼容:
https://github.com/alibaba/spring-cloud-alibaba/blob/master/README-zh.md
Spring Cloud Version | Spring Cloud Alibaba Version | Spring Boot Version |
---|---|---|
Spring Cloud 2020.0.1 |
2021.1 |
2.4.2 |
Spring Cloud Hoxton.SR12 |
2.2.7.RELEASE |
2.3.12.RELEASE |
Spring Cloud Hoxton.SR9 |
2.2.6.RELEASE |
2.3.2.RELEASE |
Spring Cloud Greenwich.SR6 |
2.1.4.RELEASE |
2.1.13.RELEASE |
Spring Cloud Hoxton.SR3 |
2.2.1.RELEASE |
2.2.5.RELEASE |
Spring Cloud Hoxton.RELEASE |
2.2.0.RELEASE |
2.2.X.RELEASE |
Spring Cloud Greenwich |
2.1.2.RELEASE |
2.1.X.RELEASE |
Spring Cloud Finchley |
2.0.4.RELEASE(停止维护,建议升级) |
2.0.X.RELEASE |
Spring Cloud Edgware |
1.5.1.RELEASE(停止维护,建议升级) |
1.5.X.RELEASE |
SpringCloudAlibaba官方整理的版本说明:
https://github.com/alibaba/spring-cloud-alibaba/wiki/%E7%89%88%E6%9C%AC%E8%AF%B4%E6%98%8E
Spring Cloud Alibaba Version | Sentinel Version | Nacos Version | RocketMQ Version | Dubbo Version | Seata Version |
---|---|---|---|---|---|
2.2.7.RELEASE* |
1.8.1 |
2.0.3 |
4.6.1 |
2.7.13 |
1.3.0 |
2.2.6.RELEASE |
1.8.1 |
1.4.2 |
4.4.0 |
2.7.8 |
1.3.0 |
2021.1 or 2.2.5.RELEASE or 2.1.4.RELEASE or 2.0.4.RELEASE |
1.8.0 |
1.4.1 |
4.4.0 |
2.7.8 |
1.3.0 |
2.2.3.RELEASE or 2.1.3.RELEASE or 2.0.3.RELEASE |
1.8.0 |
1.3.3 |
4.4.0 |
2.7.8 |
1.3.0 |
2.2.1.RELEASE or 2.1.2.RELEASE or 2.0.2.RELEASE |
1.7.1 |
1.2.1 |
4.4.0 |
2.7.6 |
1.2.0 |
2.2.0.RELEASE |
1.7.1 |
1.1.4 |
4.4.0 |
2.7.4.1 |
1.0.0 |
2.1.1.RELEASE or 2.0.1.RELEASE or 1.5.1.RELEASE |
1.7.0 |
1.1.4 |
4.4.0 |
2.7.3 |
0.9.0 |
2.1.0.RELEASE or 2.0.0.RELEASE or 1.5.0.RELEASE |
1.6.3 |
1.1.1 |
4.4.0 |
2.7.3 |
0.7.1 |
本演示项目使用版本:
Spring Cloud Version:Hoxton.SR12
Spring Cloud Alibaba Version:2.2.7.RELEASE
Spring Boot Version:2.3.12.RELEASE
4、快速搭建
准备:开发工具IOS版 IntelliJ IDEA 2021.3.1 (Ultimate Edition)、jdk1.8、Maven:apache-maven-3.8.4
要求:熟悉springboot
4.1构建父工程
整个项目由maven管理,这里使用默认初始化地址不然后面选择Maven pom创建项目时会出问题。这里我是先在码云上先创建了一个仓库,然后再将项目pull到本地。
父工程目录:
因为maven版本比较高,所以出现很多mvn文件。
修改pom文件:
<?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.wlm</groupId> <artifactId>spring-cloud-alibaba</artifactId> <version>0.0.1-SNAPSHOT</version> <name>spring-cloud-alibaba</name> <description>spring-cloud-alibaba</description> <properties> <!--java版本--> <java.version>1.8</java.version> <!--springboot版本--> <spring.boot.version>2.3.12.RELEASE</spring.boot.version> <!--spring cloud alibaba版本--> <spring.cloud.alibaba>2.2.7.RELEASE</spring.cloud.alibaba> <!--spring cloud 版本--> <spring.cloud>Hoxton.SR12</spring.cloud> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> </properties> <dependencies> <!--springboot 基本场景启动依赖--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <!--springboot 测试类依赖--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <!-- 版本依赖管理器--> <dependencyManagement> <dependencies> <!-- SpringBoot 版本管理器 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>${spring.boot.version}</version> <type>pom</type> <scope>import</scope> </dependency> <!-- Spring Cloud Alibaba 版本管理器 --> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-alibaba-dependencies</artifactId> <version>${spring.cloud.alibaba}</version> <type>pom</type> <scope>import</scope> </dependency> <!-- Spring Cloud 版本管理器 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>${spring.cloud}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
此时父工程就搭建完成了,很简单,整个项目是由maven进行管理的,依赖包是我们开发时用到的jar包,也就是框架,这里为什么什么也不选,框架结构为一个基座+多个子模块,我们上面建立的父工程就是基座,你可以把它当作一个工作空间用途是管理子模块。