当前位置 博文首页 > 2021升级版微服务教程—微服务开发环境准备

    2021升级版微服务教程—微服务开发环境准备

    作者:编程鹿 时间:2021-01-08 18:02

    2021升级版SpringCloud教程从入门到实战精通「H版&alibaba&链路追踪&日志&事务&锁」

    教程全目录「含视频」:https://gitee.com/bingqilinpeishenme/Java-Wiki

    微服务开发环境准备

    SpringCloud版本

    相关文档

    • SpringCloud官网 https://spring.io/projects/spring-cloud/
    • H 版本文档 https://docs.spring.io/spring-cloud/docs/Hoxton.SR9/reference/html/
    • 2020更新情况 https://mp.weixin.qq.com/s/V6K6Ehq8xdRwnMbKJWG7_g

    历史背景

    版本号命名规则

    关于SpringCloud的分类,根据SpringCloud版本的命名方式的改变可以分为两个阶段:

    1. 伦敦地铁站名

      在Spring Cloud 2020.0.0版本之前,SpringCloud的所有版本均按照伦敦地铁站站名从A-Z的排序进行命名,如下:

      image-20210104183006229
      image-20210104183006229
      image-20210104183201005
      image-20210104183201005

      为了便于称呼,一般也都称之为A版本,B版本,F版本和H版本。

      SR9,每当SpringCloud解决了一个重大bug就会增加SR版本,SR9就意味着在H版本的基础上解决了九个重大bug

    2. 日历化版本

      从 Spring Cloud 2020.0.0-M1 开始,Spring Cloud 废除了这种英国伦敦地铁站的命名方式,而使用了全新的 "日历化" 版本命名方式。

      什么是日历化版本?

      英文名称:Calendar Versioning

      日历化版本不是基于任意的数字,而是基于项目的发布日期的版本控制约定,随着时间的推移,版本会越来越好。

      Spring Cloud 使用了 YYYY.MINOR.MICRO 的命名规则:

      • YYYY:表示 4 位年份;
      • MINOR:代表一个递增的数字,每年以 0 开始递增;
      • MICRO:代表版本号后缀,就和之前使用的 .0 类似于 .RELEASE 一样,.2 类似于 .SR2

      预发布版本的后缀分隔符也从 . 变更为 -,如:2020.0.0-M12020.0.0-RC2 命名所示。

      使用日历化版本命名方式,可以更清楚的看出当前版本的年份,看到字母、纯数字方式的版本号都不知道自己多久没升级了。

      详细内容见文档:https://spring.io/blog/2020/04/17/spring-cloud-2020-0-0-m1-released

    版本的变化给SpringCloud带来了什么样的改变呢?

    SpringCloud的改变目前来说主要体现在对Netflix套件的支持上,早期SpringCloud主要是封装了Netflix套件实现服务注册发现,负载均衡,熔断等功能,但是随着版本的迭代,由于Netflix停止开源项目的更新,所以SpringCloud开始逐步减少对Netflix套件的支持。简单可以分为以下三个时间阶段:

    1. 早期,SpringCloud完全封装Netflix套件,核心功能均有Netflix组件提供

    2. 2018年前后,Netflix 公司宣布其核心组件 Hystrix、Ribbon、Zuul 等均进入维护状态。同时Spring Cloud Netflix 项目进入维护模式,并计划在 2020 年废除。

    3. 北京时间 2020 年 12 月 22 日深夜,Spring Cloud 2020.0.0 版本正式发布, Netflix 模块的全部移除,并且给出替代组件

      image-20210105110251943
      image-20210105110251943

    根据上述变化,简单来说,H版本和2020版本目前属于一个分界线式的版本,从此开始,SpringCloud弃用Netflix套件,进入一个新的时代,但是对于企业开发而言,现在未必需要立马更新最新版本。

    一方面大量项目还是采用Netflix组件进行开发,目前来看并没有替换的必要性。另一方面部分技术并不能完全兼容新版本,例如SpringCloud Alibaba就不能完全兼容新版本。

    总结

    本次教程以H版本为主进行学习,依然采用Netflix组件进行微服务项目开发,同时也会深入学习SpringCloud Alibaba相关组件,并且根据我司项目实际情况,对认证,分布式事务,分布式锁,分布式日志管理等业务场景进行功能实现讲解

    在我看来,本教程作为承上启下的作用,对于广泛采用Netflix组件的企业来说,学习本教程可以快速上手进行开发,对于未来的技术趋势也熟稔于心,可以在合适的时候进行项目的技术迭代。

    下个版本的教程,将会推出SpringCloud 2020版本,删除Netflix组件的同时,更加偏向云原生开发

    该教程版本选择

    关于SpringCloud版本选择主要考虑的问题就是SpringCloud和SpringBoot的兼容性问题,关于这一点建议严格按照官网文档进行,如下:

    image-20210104183430890
    image-20210104183430890

    版本选择:

    • SpringCloud Hoxton.SR9
    • SpringBoot 2.3.5.RELEASE
    • SpringCloud Alibaba 2.1.2.RELEASE
    • Java版本 Java8

    项目搭建

    父项目创建

    1. 创建父项目

    2. 确认IDEA设置

      1. Maven设置

        image-20210105145601445
        image-20210105145601445
      2. 文件过滤 可以不配置

        不显示 .idea 文件夹

        image-20210104220128578
        image-20210104220128578
    3. 父项目 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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
          <modelVersion>4.0.0</modelVersion>

          <groupId>com.baizhi</groupId>
          <artifactId>microservices-cloud</artifactId>
          <version>1.0-SNAPSHOT</version>
          <packaging>pom</packaging>
          <description>统一依赖版本</description>

          <properties>
              <java.version>1.8</java.version>
              <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
              <maven.compiler.source>1.8</maven.compiler.source>
              <maven.compiler.target>1.8</maven.compiler.target>
      <!--        版本号-->
              <spring.cloud-version>Hoxton.SR9</spring.cloud-version>
              <spring.boot-version>2.3.5.RELEASE</spring.boot-version>
              <spring.cloud.alibaba-version>2.1.2.RELEASE</spring.cloud.alibaba-version>
          </properties>

          <dependencyManagement>
              <dependencies>
                  <dependency>
                      <groupId>org.springframework.boot</groupId>
                      <artifactId>spring-boot-dependencies</artifactId>
                      <version>${spring.boot-version}</version>
                      <type>pom</type>
                      <scope>import</scope>
                  </dependency>

                  <dependency>
                      <groupId>org.springframework.cloud</groupId>
                      <artifactId>spring-cloud-dependencies</artifactId>
                      <version>${spring.cloud-version}</version>
                      <type>pom</type>
                      <scope>import</scope>
                  </dependency>

                  <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>
              </dependencies>
          </dependencyManagement>

          <build>
              <plugins>
                  <plugin>
                      <groupId>org.springframework.boot</groupId>
                      <artifactId>spring-boot-maven-plugin</artifactId>
                  </plugin>
              </plugins>
          </build>
      </project>
    4. 设置跳过单元测试

      image-20210104220152154
      image-20210104220152154

    商品服务和订单服务创建

    通过Spring Initializr的方式创建项目

    image-20210105150153594
    image-20210105150153594

    Spring Initializr SpringBoot项目工程脚手架,可以直接创建出来SpringBoot项目,包含application配置文件和启动类等。https://start.spring.io/

    下一篇:没有了