目录
4.SpringCloud VS SpringBoot VS SpringCloud Alibaba版本三者制约对应关系
一、SpringBoot和SpringCloud版本选型
| 技术 | 版本 |
|---|---|
| Java | jdk17+ |
| boot | 3.2.0 |
| cloud | 2023.0.0 |
| cloud alibaba | 2023.0.0.0-RC1 |
| Maven | 3.9+ |
| MySQL | 8.0+ |
1.Springcloud版本选择

通过上面官网发现,Boot官方强烈建议你使用Java17+升级到3.X以上版本。

2.Springcloud版本选择


与 SpringBoot 3.2.0 相对应的 SpringCloud 版本为 2023.0.x。
3.Springcloud Alibaba版本选择

官网显示版本为 2021.0.4.0,但官网有延后情况,非最新版(不推荐)。


因此,我们选择 SpringCloudAlibaba 版本为 2023.0.0.0-RC1。
4.SpringCloud VS SpringBoot VS SpringCloud Alibaba版本三者制约对应关系

若同时用 boot 和 cloud,由话事人 cloud 决定 boot 版本。

同时,cloud 也决定了使用哪种版本的 SpringCloudAlibaba。
二、SpringCloud介绍
1.单体架构
单体架构:将业务的所有功能集中在一个项目中开发,打成一个包部署

优点:
- 架构简单
- 部署成本低

当随着业务越来越多,代码量将上升至几万行甚至几十万行,开发人员也会需要越来越多!
各业务之前存在耦合性,编写、提交代码时,可能会产生冲突。
同时,代码量过高也会造成编译,打包时间过长。
某些业务存在高并发,就会很容易将服务器资源耗尽,其他业务就只能等待,访问时就会卡顿。
缺点:
- 团队协作成本高
- 系统发布效率低
- 系统可用性差
总结:单体架构适合开发功能相对简单,规模较小的项目
2.微服务架构

微服务架构:服务化,就是把单体架构中的模块拆分为多个独立的项目。它以专注于单一职责的很多小型项目为基础,组合出复杂度大型应用。

微服务通常需要:
- 粒度小
- 团队自治
- 服务自治
3.springcloud
实现微服务架构,会面临多种问题,需要通过以下各种技术得以解决:

大体流程如下:

这就会导致程序员除了编写业务逻辑代码,还需要为了保证项目正常运行,做各种其他的事情。
SpringCloud 就集成了各种微服务功能组件,并基于 SpringBoot 实现了这些组件的自动装配,从而提供了良好的开箱即用体验,帮助程序员减负!
4.SpringCloud相关组件介绍
在2019年之前,使用的大部分技术都是Netflix提供的,但是由于开发SpringCloud的相关技术不挣钱,因此Netflix就暂停开发相关技术了,虽然他提供的那些技术依旧可以使用,但是已经不推荐了。
对于老的技术栈,可能老项目中会用到,这里只介绍一些推荐的新组件。

注册与发现
- Eureka【Netflix最后的火种,不推荐】
- Consul【推荐使用】
- Etcd【可以使用】
- Nacos【推荐使用,阿里巴巴提供的】
服务调用和负载均衡
- Ribbon【Netflix提供的,建议直接弃用】
- OpenFeign
- LoadBalancer
分布式事务
- Seata【推荐使用,阿里巴巴的】
- LCN
- Hmily
服务熔断和降级
- Hystrix【已经停更了,不推荐】
- Circuit Breaker【这只一套规范,使用的是它的实现类】
- Resilience4J【CircuitBreaker的实现类,可以使用】
- Sentinel【阿里巴巴的,推荐使用】
服务链路追踪
- Sleuth+Zipkin【逐渐被替代了,不推荐】
- Micrometer Tracing【推荐使用】
服务网关
- Zuul【不推荐使用】
- Gate Way
分布式配置管理
- Config+Bus【不推荐了】
- Consul
- Nacos

三、微服务项目搭建
1.项目构建
需求:
① 先做一个通用boot微服务
② 逐步引入cloud组件纳入微服务支撑体系

步骤:
① 新建一个 maven 父工程,该项目只留下 pom.xml 文件,

② 检查项目的编码格式,统一为UTF-8

③ 检查注解支撑是否打开

④ 检查 java 编译版本

⑤ 父工程的 pom 文件导入依赖,然后刷新
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<hutool.version>5.8.22</hutool.version>
<druid.version>1.1.20</druid.version>
<mybatis.springboot.version>3.0.3</mybatis.springboot.version>
<mysql.version>8.0.11</mysql.version>
<swagger3.version>2.2.0</swagger3.version>
<mapper.version>4.2.3</mapper.version>
<fastjson2.version>2.0.40</fastjson2.version>
<persistence-api.version>1.0.2</persistence-api.version>
<spring.boot.test.version>3.1.5</spring.boot.test.version>
<spring.boot.version>3.2.0</spring.boot.version>
<spring.cloud.version>2023.0.0</spring.cloud.version>
<spring.cloud.alibaba.version>2023.0.0.0-RC1</spring.cloud.alibaba.version>
</properties>
<dependencyManagement>
<dependencies>
<!--springboot 3.2.0-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>${spring.boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!--springcloud 2023.0.0-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring.cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!--springcloud alibaba 2023.0.0.0-RC1-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>${spring.cloud.alibaba.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!--SpringBoot集成mybatis-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>${mybatis.springboot.version}</version>
</dependency>
<!--Mysql数据库驱动8 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.version}</version>
</dependency>
<!--SpringBoot集成druid连接池-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>${druid.version}</version>
</dependency>
<!--通用Mapper4之tk.mybatis-->
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper</artifactId>
<version>${mapper.version}</version>
</dependency>
<!--persistence-->
<dependency>
<groupId>javax.persistence</groupId>
<artifactId>persistence-api</artifactId>
<version>${persistence-api.version}</version>
</dependency>
<!-- fastjson2 -->
<dependency>
<groupId>com.alibaba.fastjson2</groupId>
<artifactId>fastjson2</artifactId>
<version>${fastjson2.version}</version>
</dependency>
<!-- swagger3 调用方式 http://你的主机IP地址:5555/swagger-ui/index.html -->
<dependency>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
<version>${swagger3.version}</version>
</dependen

最低0.47元/天 解锁文章
1万+

被折叠的 条评论
为什么被折叠?



