SpringCloud框架学习(第一部分:初始项目搭建)

目录

一、SpringBoot和SpringCloud版本选型

 1.Springcloud版本选择

2.Springcloud版本选择 

3.Springcloud Alibaba版本选择

4.SpringCloud VS SpringBoot VS SpringCloud Alibaba版本三者制约对应关系

二、SpringCloud介绍

1.单体架构

2.微服务架构

3.springcloud

4.SpringCloud相关组件介绍 

三、微服务项目搭建

1.项目构建

2.MyBatis逆向工程

3.微服务提供者支付module

4.待优化的问题

四、项目改进

1.优化时间格式

(1)方式一:

(2)方式二:

2.统一返回结果Result

(1)步骤一:定义一个枚举类,用于状态码的返回

(2)步骤二:定义统一返回类Result

(3)步骤三:修改原来接口的返回值

3.全局异常处理

五、微服务调用者订单module

1.项目构建

2.服务调用RestTemplate

(1) RestTemplate介绍

(2)项目配置 RestTemplate

3.重复代码抽取

4.存在问题


一、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,但官网有延后情况,非最新版(不推荐)。

Github说明:GitHub - alibaba/spring-cloud-alibaba: Spring Cloud Alibaba provides a one-stop solution for application development for the distributed solutions of Alibaba middleware.

因此,我们选择 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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值