作者:铖朴

新版别预览

本次发布的 Spring Cloud Alibaba 2022.0.0.0-RC1 版别,是依据社区 2022.x 主干分支进行构建发布第一个 Release Candidate(RC)版别,考虑到本次版别晋级归于严重版别改动,因而暂时先以 RC 版别方法发布,当时我们能够先试用起来,待后续时机老练社区会赶快发布正式版别。新版别预览内容如下:

2022.0.0.0-RC1 版别

是在 Spring Cloud 2022.0.0、Spring Boot 3.0 的根底上,对生态中原有的包括注册装备中心、分布式音讯等在内的众多组件进行了适配,归于一个大改动的版别。本次发布的 Spring Cloud Alibaba 2022.0.0.0-RC1 版别对以下组件版别进行了适配:

  • Seata:客户端适配版别为1.6.1 版别 [ 1] ,该版别比较于之前的1.5.x版别,现已支撑MySQL updatejoin,PostgreSQL & Oracle多主键支撑,InsertOnDuplicateUpdate 做了很多优化,支撑多注册中心等及中心功用很多优化,该版别客户端已完结JDK 17的支撑。

  • RocketMQ:客户端适配版别为4.9.4版别 [2 ] ,该版别供给了轻量级音讯队列和为延迟音讯供给异步发送功用等在内的诸多特性。

  • Sentinel:客户端适配版别为1.8.6 版别 [3 ] ,该版别调整了Sentinel规矩类中的特点,并将javax.* 包下的相关根底类都替换为了jakarta.*包途径下的,以兼容 JDK 17 。

  • Nacos: 客户端适配版别为 2.2.1-RC,该版别是Nacos社区在最新发布的 2.2.0 版别根底上为适配最新GraalVM构建原生镜像而推出的最新版别客户端,该版别可直接搭配Nacos 2.x系列Nacos Server运用,不仅能体会 2.2.0 最新带来的数据源、衔接限流等插件才干,而且可直接构建GraalVM原生镜像,发动速度和运转时内存得到大幅下降。

除了组件晋级,别的也修正了一些之前版别所存在的问题,进一步提升了Spring Cloud Alibaba 运用的稳定性与健壮性。更多内容可拜见该版别相关发版公告 [4 ]

版别解读

为什么是 JDK 17?

很多人,听到 Spring Boot 3.0 默许所需的 JDK 最低版别为 17 会感到十分惊讶!对很多 JDK 8 用户来说 Spring 官方的挑选必定是不明智的。真的是这样的吗?关于这个问题,咱们认为首要依据 2 个原因:Oracle 官方对 JDK 支撑方针和技能先进性。

Oracle 当时对一切发布的 JDK 版别分为 Long-Term-Support (LTS) releases 和non-TLS releases,TLS 版别的 JDK 作为 Oracle 官方长期支撑的版别,在未来的很长一段时刻内,官方都会对该版别进行继续的保护和更新。而 non-TLS 版别的 JDK 仅仅是作为过度版别,只需下一个 LTS 版别呈现今后,官方就不会对其进行保护了,因而也是不适合作为外部用户出产长期运用的。

Spring Cloud Alibaba 2022.0.0.0 版本发布啦!

因而在 Spring Boot 3.0 于今年年初的第一个 Milestone 版别发布之时,可选的 JDK 版别从上图来看,就只有 JDK 7、8、11 和 17。为什么是 17 而不是其之前的版别呢?这个就要结合 Oracle 官方的 JDK 支撑方针来理解了。Oracle 官方一般将所发布的 JDK 后续的支撑策略分为以下 3 种:

  • Premier Support: 其能够理解为 Oracle 供给的标准支撑类型,其最新方针下的支撑时刻周期为 5 年,5 年内 Oracle 官方会对该版别 JDK 供给继续免费的更新与晋级服务。

  • Extended Support:作为标准支撑后的连续支撑类型,其最新方针下的支撑时刻周期为 3 年,3 年内 Oracle 的用户能够经过支付必定的支撑服务费用购买 Oracle 对该版别 JDK 所供给的更新支撑服务。

  • Sustaining Support:其是 Oracle 官方在连续支撑类型后的一种支撑服务,当然其也是要收费的,其没有明确的截止时刻。

依据上述 Oracle 官方对当时 JDK 所供给的支撑服务方法以及 JDK 版别本身的先进性来看,JDK 7、8 现已截止了 Premier Support 支撑服务,11 相关的 Premier Support 也快到期了。JDK 17 作为现在最新的 LTS 版别,本身无论是在语法仍是运转功用方面都在之前版别根底上做了必定优化,具有比较大的优势。因而,挑选 JDK 17 作为最新的 Spring Boot 3.0 的默许 JDK 版别也就水到渠成了!

Spring Cloud 2022.0.0 带来了什么?

Spring Cloud 在 2022 年的终究一个月迎来了 2022.x 系列的第一个正式版别 2022.0.0,有些用户这个时分可能会有一种快完毕了才刚刚开端的感觉!其实不然,Spring 在 2022 年的第一个月就推出了 2022.0.0-M1,作为第一个 Milestone 版别。

Spring Cloud Alibaba 2022.0.0.0 版本发布啦!

在接下来一年里,其连续发布了 5 个 Milestone 和 3 个 Release Candicate(RC) 版别今后,才正式推出终究的 General Available(GA) 版别。由此可见,其实 Spring 官方做事情仍是十分靠谱和有耐心的,值得尊敬!

Spring Cloud 作为当时业界运用最为广泛的微服务结构,其界说了一套包括:分布式注册装备中心、分布式音讯、限流降级、远程进程调用、负载均衡等在内的较为完好的一套微服务处理计划标准。在 2022.0.0 中,首要做了如下部分内容的调整:

  • Spring Cloud Common 模块中因为 AsyncRestTemplate 已在 Spring Framework 6 中删去,因而删去了对应的 LoadBalancer 主动装备,老代码中有涉及相关内容并考虑晋级的用户需求留意。

  • Spring Cloud Common 模块中 LoadBalancer 的 ResponseData 现在现已调整为运用 Spring 中 org.springframework.http.HttpStatusCode,跟 Spring 其他模块保持了一致性。

  • Spring Cloud Common 模块中第一次正式从源码中移除 @SpringCloudApplication注解,@EnableDiscoveryClient、@EnableCircuitBreaker 注解也都不再默许需求增加内容等。

  • Spring Cloud Stream 模块正式移除了对 @StreamListener、@Input 等注解的支撑,当时只能运用函数式编程方法进行音讯的订阅与发送。

  • Spring Cloud OpenFeign 中 feign.autoconfiguration.jackson.enabled 特点默许改为 true。

更多详细信息能够参阅Spring Cloud 2022.0.0 版别阐明 [5 ]

Spring Boot 3.0 意味着什么?

Spring Boot 3.0 距离上次大版别 2.0 发布以来,现已曩昔 4 年半,该版别社区历时 12 个月共提交超过 5700 个 commit。其在 Spring 6.0 和 Spring Native 的根底上首要做了 4 大首要的调整:

  • 调整 JDK 基线到 17 版别,兼容 JDK19;

  • 将 Java EE 依靠搬迁到 Jakarta EE;

  • 支撑运用运用 GraalVM 技能生成原生镜像,取代了之前试验性质的 Spring Native 项目,让 Spring Boot 运用直接迈向 GraalVM;

  • 运用 Micrometer 和 Micrometer Tracing 提升了运用可观测性。

其间,前 2 点前文也有阐明,不再赘述。接下来迁就其间的 GraalVM 和可观测方面进行介绍。

迈向 GraalVM

Spring Boot 3.0 本次带来最大的改动便是GraalVM原生镜像的支撑,也是官方文档中强调的他们花费时刻精力比较多的部分。

GraalVM 技能作为 JRE 的替代计划,其经过预先编译(Ahead Of Time,AOT)等技能对 Java 运用进行预先编译,让 Spring 在运转运用时把握更多运用有关的信息,让整个运用发动速度更快。别的,经过编译东西在编译进程中经过消除一些不必要的内容能够让终究的运用更小,占用内存更低。关于一些对发动速度要求十分高的场景,比方 Serverless、FaaS 场景十分友好!

说到 GraalVM 技能,其最早来自于 Spring 团队于2019 年建议的 Spring Native 项目。它作为一个试验性质的项目,在曩昔几年经过与 Spring Boot 3.0 和 Spring Framework 6.0 之前的项目进行整合运用,据 Josh Long 在最近的相关采访 [6 ] 泄漏,该试验项目现已验证了 Spring Boot 2.x 和 Spring Framework 5.x 的各项功用。本次 Spring Boot 3.0 直接将其正式从 Spring Native 迁入到 Spring Boot 中来,也预示着该项技能开端逐步走向老练,Spring生态开端迈入 GraalVM 阶段!

JVM编译布置方法比较, Gra alVM 具有以下特点:

  • 在运用构建阶段,从主入口点就开端进行运用程序的静态剖析。

  • 创立本机镜像时,经过代码剖析,会将无法访问的代码删去,并且不会成为可履行文件的一部分,从而可在必定程度上紧缩程序包巨细。

  • GraalVM 无法直接感知代码的动态元素,因而关于存在反射、序列化和动态署理的运用程序,需求提早供给相关hint装备文件,协助解析运用程序,相关操作进程可参阅官方文档 [7 ]

  • 运用程序类途径在构建时是固定的,不能更改。

  • 没有慵懒类加载,可履行文件中的一切内容都将在发动时加载到内存中。

  • 支撑的 Java 运用程序在某些方面存在一些限制,因而现在并不能保证之前的 Java 运用都可直接运用GraalVM技能进行运用构建,有必定概率会存在不兼容的异常状况。

本次发布的 Spring Cloud Alibaba 2022.0.0.0 版别所包括的部分中间件客户端已完结了构建 GraalVM 原生运用的适配,以下是社区对现在所支撑的服务注册与发现、分布式事务模块相关示例运用在晋级为 Spring Boot 3.0 今后,运用 GraalVM 构建原生运用镜像做的在发动速度和运转时占用内容相关的测验(Sentinel、Seata 和 RocketMQ 现在还在适配中,以下测验进程在 MacOS 11.4,2.6 GHz 6-Core Intel Core i7 处理器,16G 内存环境下模拟 5 次取平均值测得):

Spring Cloud Alibaba 2022.0.0.0 版本发布啦!

从上述对比可发现,最新支撑 Spring Boot 3.0 依据 GraalVM 的 Spring Cloud Alibaba 运用会在发动速度、运转时内存占用和运用包巨细方面得到大幅度下降,例如,其间服务注册消费运用发动速度提升了近 10 倍,运转时内存占用比本来下降了近乎 2/3,效果十分明显。这给云原生年代,托管在云上的运用带来了明显优势,让其能够更快的进行弹性扩缩容以及下降企业全体用云本钱!

可观测才干

微服务运用带来了系统的解耦,把一个运用拆分红若干个模块来进行布置,这样在提高系统的可扩展性的一起,一个恳求的处理可能会经过多个独自布置的模块,因而,让问题排查明显提升。可观测技能经过界说 logging、metrics 和 traces 3个维度目标数据的收集和处理,让系统运维人员能够方便地把握系统运转状况,及时排查处理问题。

Spring Boot 3.0中别的一项严重特性,便是其在可观测领域的增强。在 Spring Boot 3.0 中,支撑了可观测事实标准 Micrometer 1.10 [8 ] 中引进的新 API。例如,Spring Boot 3.0 可主动装置一个 ObservationRegistry 实例目标,为用户供给一个一起适用于 metrics 和 traces 的API接口。别的,3.0 也为用户供给了主动装备Micrometer Tracing [9 ] 功用,详细包括支撑第三方的相关可观测东西,如:Brave、OpenTelemetry、Zipkin 以及 Wavefront。让Spring Boot 运用能十分方便的集成各种主流的可观测东西。更多有关可观测的内容可拜见相关文档阐明 [10 ]

除了上述介绍的首要特性以外,Spring Boot 3.0 还处理很多之前存在的bug,更多详细内容可拜见Spring Boot 3.0 版别阐明 [11]

晋级进程

晋级操作

假如关于一个 Spring Boot 3.0项目需求运用Spring Cloud Alibaba 2022.0.0.0-RC1 版别,请在项目中增加如下 Management 依靠:

<dependencyManagement>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-dependencies</artifactId>
        <version>2022.0.0</version>
        <type>pom</type>
        <scope>import</scope>
    </dependency>
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-alibaba-dependencies</artifactId>
        <version>2022.0.0.0-RC1</version>
        <type>pom</type>
        <scope>import</scope>
    </dependency>
</dependencyManagement>

留意除了调整上述JDK版别,还需求将JDK版别晋级到17。

兼容 Spring Boot 3.0&Spring Cloud2022.0.0

Spring Cloud Alibaba项目作为阿里巴巴中间件微服务领域的一站式处理计划,在本次发布的 2022.0.0.0 版别适配进程中,因为Spring Boot & JDK的较大改动给项目适配造成了除功用晋级以外的很多其他兼容性作业。假如是直接构建新项目,能够参阅最新的 Spring Boot 3.0 项目构建进程进行操作即可,以下进程能够省略,假如是老的运用希望晋级到 JDK17 & Spring Boot 3.0 可能需求做如下一些兼容处理:

Java EE依靠搬迁到Jakarta EE

因为 Oracle 跟 Eclipse 基金会在 Java EE商标上所存在的胶葛,从 Jakarta EE 9 开端, javax.* 包下的根底类都被搬迁到了jakarta.。因而,关于本次晋级假如在程序中运用了 javax. 最初的导包,都需求将其进行修正。

以下列出了一系列东西能够协助你完结这部分的搬迁:

  • OpenRewrite recipes [ 12] .
  • The Spring Boot Migrator project [ 13] .
  • Migration support in IntelliJ IDEA [ 14] .

spring.factories 文件不再支撑对 Auto-configuration 进行主动装置

从 Spring Boot 3.0 开端,META-INF/spring.factories 文件不再支撑对 Auto-configuration 进行主动装置。用户能够运用 AutoConfiguration.imports 文件代替 META-INF/spring.factories 文件对本来编写在其间的主动装置类进行搬迁。假如不做对应的修正,直接晋级你会发现之前程序运转阶段主动注入的目标都将不存在导致运转报错。这个也是本次 Spring Cloud Alibaba 所运用的方法,如本次 Spring Cloud Alibaba 晋级进程中服务注册与发现模块就经过创立如下 META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports 进行主动类装置:

com.alibaba.cloud.nacos.discovery.NacosDiscoveryAutoConfiguration
com.alibaba.cloud.nacos.endpoint.NacosDiscoveryEndpointAutoConfiguration
com.alibaba.cloud.nacos.registry.NacosServiceRegistryAutoConfiguration
com.alibaba.cloud.nacos.discovery.NacosDiscoveryClientConfiguration
com.alibaba.cloud.nacos.discovery.reactive.NacosReactiveDiscoveryClientConfiguration
com.alibaba.cloud.nacos.discovery.configclient.NacosConfigServerAutoConfiguration
com.alibaba.cloud.nacos.loadbalancer.LoadBalancerNacosAutoConfiguration
com.alibaba.cloud.nacos.NacosServiceAutoConfiguration
com.alibaba.cloud.nacos.utils.UtilIPv6AutoConfiguration

不在允许 URI 尾部斜杠匹配

在 Spring 6 以前,恳求途径运用”/hello”和”/hello/”都能够进入如下到 hello() 方法,但是在晋级今后需求留意只有前者恳求才干正常被配到到方法中,后者会抛出 404 到不到匹配途径异常。

@GetMapping("/hello")
String hello() {
    return "Hello World";
}

Spring Cloud Stream 注解运用方法被移除

Spring Cloud Stream 作为 Spring Cloud 系统内集成具有高度可扩展性的分布式音讯处理标准完结,Spring Cloud Alibaba 依据其将 RocketMQ 集成进入了 Spring Cloud 生态,让用户能够不用修正一行业务代码仅调整依靠和装备即可进行音讯中间件从 RabbitMQ、Kafka 等搬迁到 RocketMQ。在 Spring Cloud 2022.0.0 最新版别所对应的 Spring Cloud Stream 4.0 中移除之前的注解方法在客户端处理音讯才干,现在仅支撑函数式方法。

因而,像之前的 @StreamListener 和 @Input 等注解在晋级今后都不再能直接运用。现在,Spring Cloud Alibaba 中 RocketMQ 相关模块示例代码已调整为函数方法,函数式方法让代码编写进程变得愈加简洁,以下为运用函数式方法完结广播音讯的消费代码,更多示例可参阅相关示例模块 [ 15]

@SpringBootApplication
public class RocketMQBroadcastConsumer2Application {
  private static final Logger log = LoggerFactory
      .getLogger(RocketMQBroadcastConsumer2Application.class);
  public static void main(String[] args) {
    SpringApplication.run(RocketMQBroadcastConsumer2Application.class, args);
  }
  @Bean
  public Consumer<Message<SimpleMsg>> consumer() {
    return msg -> {
      log.info(Thread.currentThread().getName() + " Consumer2 Receive New Messages: " + msg.getPayload().getMsg());
    };
  }
}

Spring Cloud Common 模块正式移除 @SpringCloudApplication 注解

在 Spring Cloud 2022.0.0 所对应的 Spring Cloud Common 4.0.0 中正式移除 @SpringCloudApplication 注解。该注解的推出是为了包括 @SpringBootApplication、@EnableDiscoveryClient、@EnableCircuitBreaker 这 3 个 Spring Cloud 运用都必要的注解别离供给运用依靠办理,服务注册和断路器。在后来经过引进相关的依靠就可默许供给服务注册以及断路器才干,因而这两个注解也不再有必要,经过装备 spring.cloud.discovery.enabled=false 可直接封闭默许注册行为,这样操作愈加灵敏,这次在新版别中 @SpringCloudApplication 正式被移除,晋级进程中老版别需求留意进行相应的调整。

上述内容是 Spring Cloud Alibaba 适配 JDK 17 & Spring 6 & Spring Boot 3.0 & Spring Cloud 2022.0.0 进程中结构层面比较直接的一些变化。其他的一些相关新版别所带来的更多特性和改动可详细参阅相关文档Spring 6 [ 16] 、Spring Boot 3.0 [ 17] 、Spring Cloud 2022.0.0 [ 18] 。别的在适配支撑 GraalVM 技能构建 Spring Cloud Alibaba 运用原生镜像方法,社区了也联合 Nacos、Sentinel、Seata 等社区共同做了一些改造和兼容。详细在新特性运用介绍中会有提及。

新特性以及运用方法

运用 GraalVM 技能构建运用

本次适配 Spring Boot 3.0 的 Spring Cloud Alibaba 所支撑的一切组件中,Nacos 2.2.1-RC现已支撑 GraalVM 技能构建运用。接下来,将介绍一下相关组件运用 GraalVM 技能进行运用编译与运转测验:

项目构建

依照一般的 Spring Cloud Alibaba 运用构建方法进行项目构建即可,以下为相关有必要增加的依靠内容:

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>3.0.0</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>
<dependencies>
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-commons</artifactId>
</dependency>
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>2022.0.0</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-alibaba-dependencies</artifactId>
            <version>2022.0.0.0-RC1</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

以上为本次经过 Spring Cloud Alibaba 运用 Nacos 进行服务注册所需求的必要依靠,其他依靠请依据自身需求进行调整,请留意,运用 GraalVM spring-boot-starter-parent 父模块是十分要害的,其声明一个 native profile,其间包括了创立、运转 GraalVM 原生映像的必要信息。

构建 Spring Boot 原生镜像运用首要有两种方法:

  1. 运用 Spring Boot 对 Cloud Native Buildpacks 的支撑来生成包括本机可履行文件的轻量级容器。
  2. 运用 GraalVM Native Build Tools 生本钱机可履行文件。

因为第一种方法运用进程中对本地环境有必定的要求,如需运用可参阅Spring Boot 3.0 相关用户文档 [ 19] 。本文接下来演示运用第二种方法进行 GraalVM 运用构建。

环境预备

要运用 Native Build Tools 构建原生镜像,需求在首先在机器上装置 GraalVM 发行版。您能够在Liberica Native Image Kit [20 ] 页面上手动下载它,也能够运用像 SDKMAN! 这样的下载办理器。本文演示环境为 MacOS,假如是 Windows 可参阅相应文档 [21 ] 进行操作。履行以下指令装置 GraalVM 环境:

sdk install java 22.3.r17-nik
sdk use java 22.3.r17-nik

经过检查 java -version 的输出来验证是否装备了正确的版别:

$ java -version
openjdk version "17.0.5" 2022-10-18 LTS
OpenJDK Runtime Environment GraalVM 22.3.0 (build 17.0.5+8-LTS)
OpenJDK 64-Bit Server VM GraalVM 22.3.0 (build 17.0.5+8-LTS, mixed mode)

资源文件预备

在构建运用之前,需求在运用 pom.xml 文件中增加如下相关构建东西插件。

<build>
    <plugins>
      <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
        <configuration>
          <jvmArguments>
            -agentlib:native-image-agent=config-merge-dir=src/main/resources/META-INF/native-image/
          </jvmArguments>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.graalvm.buildtools</groupId>
        <artifactId>native-maven-plugin</artifactId>
      </plugin>
    </plugins>
</build>

增加完上述插件后,经过以下指令生成运用中反射、序列化和动态署理所需的 hint 装备文件。

mvn -Pnative spring-boot:run

运转成功今后,停止运用今后,可发现项目 resource/META-INF/native-image 目录下会生成以下一些 hint 文件:

  • resource-config.json:运用中资源 hint 文件
  • reflect-config.json:运用中反射界说 hint 文件
  • serialization-config.json:运用中序列化内容 hint 文件
  • proxy-config.json:运用中 Java 署理相关内容 hint 文件
  • jni-config.json:运用中 Java Native Interface(JNI)内容 hint 文件

因为 GraalVM 无法直接感知代码的动态元素,因而需求这些 hint 原生协助生成的原生运用镜像进行运转。

留意:履行以上指令发动运用进行运用特点解析的进程是动态的,在该阶段需求完好测验一遍运用的一切功用才干保证完好生成运用运转进程中的一切有必要动态特点,不然会呈现生成的装备文件中内容不完好造成运转阶段报错。社区在适配 Nacos 服务注册与消费测验进程中就因为测验不充分导致过相似过错。

编译原生运用

上述进程一切安排妥当今后,经过以下指令进行原生运用构建:

mvn -Pnative native:compile

原生运用构建阶段会比较耗时,依据本地环境资源状况会耗费几分钟时刻,以上进程都顺畅履行今后,呈现如下成果则表明构建成功:

Finished generating 'nacos-discovery-provider-example' in 2m 36s.
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  02:51 min
[INFO] Finished at: 2022-12-21T13:43:22+08:00
[INFO] ------------------------------------------------------------------------

接下来咱们经过 target/nacos-discovery-provider-example 发动运用,如下图显现成果可见,发动速度十分敏捷,仅 0.3s 多就完结了运用发动和服务注册:

...... : [REGISTER-SERVICE] public registering service DEFAULT_GROUP@@service-provider with instance: Instance{instanceId='null', ip='30.221.144.116', port=18082, weight=1.0, healthy=true, enabled=true, ephemeral=true, clusterName='DEFAULT', serviceName='null', metadata={preserved.register.source=SPRING_CLOUD}}
...... : null No credential found
...... : nacos registry, DEFAULT_GROUP service-provider 30.221.144.116:18082 register finished
...... : Started ProviderApplication in 0.328 seconds (process running for 0.339)

别的,咱们能够经过 vmmap pid | grep Physical 指令检查运转进程中的内存占用状况:

Spring Cloud Alibaba 2022.0.0.0 版本发布啦!

以上进程则为一个 Spring Cloud Alibaba 运用运用 GraalVM技能构建运用并完结向 Nacos 注册的整个进程,相关示例代码能够参阅SCA Nacos Example [22 ] 。特别需求留意的是,OpenFeign 运用GraalVM 进程中需求进行一些调整,比方增加 spring.cloud.refresh.enabled=false 装备,详细设置进程可参阅相关OpenFeign阐明文档 [23 ]

晋级建议与留意事项

  1. 此次支撑 Spring Boot 3.0 的 Spring Cloud Alibaba 版别相关内容改动全体仍是比较大的,老项目特别是 Spring Boot 2.4 以下的直接搬迁存在必定的兼容性危险,建议相关搬迁操作先进行充分验证和测验今后再进行。

  2. 此次引进 Spring Boot 3.0 中的 GraalVM 技能在运用发动速度、运转时内存占用率和包巨细方面比较于传统的 JVM 虚拟机模式有十分明显的优势,在必定程度上处理 Java 语言一向被诟病的发动速度慢、构建包过大等问题。但相关技能现在也还在发展中,段时刻内还有必定问题需求处理,比方本次发布的 Spring Cloud Alibaba 版别中除了服务注册与发现模块完结了开始的 GraalVM 支撑,其他模块或多或少存在一些问题还无法直接运用 GraalVM,这块社区也在继续尽力中。

社区未来规划

现在,本次发布的 Spring Cloud Alibaba 版别开始完结了对 GraalVM 支撑,Sentinel/Seata/RocketMQ 等模块也正在火热支撑中,社区也会在后续完结兼容适配今后进行发布,这块也是未来 2022.x 分支的短期作业重心!我们现在能够先经过社区 Examples 模块完结新版别的功用体会,云原生运用脚手架对 Spring Cloud Alibaba 的 2022.0.0.0 版别的支撑也会在近期支撑上线,到时我们能够经过start.aliyun.com愈加快捷的构建新运用,云原生运用脚手架是一款依据 Spring Initializr 项目根底之上,支撑多种工程架构、供给代码示例片段、组件更丰富、生态更敞开的一款脚手架。其致力于在当下云原生年代,为广阔开发者供给更简略、更高效的项目构建体会。现在该项目现已开源,Github 地址如下:

github.com/alibaba/clo…

别的在未来,Spring Cloud Alibaba 社区的作业重心会投入到构建 Spring Cloud 生态的微服务管理才干上。当时社区现已依据 Istio VirtualService 和 DestinationRule 流量以及安全标准完结了标签路由和服务鉴权等才干,在未来用户仅需经过编写 CRD 规矩经过 Istio 控制面进行解析和下发到系统中的 Spring Cloud Alibaba 运用。便可轻松具有原生微服务管理才干。欢迎感兴趣的同学扫描下方钉钉二维码参加社区沟通群,一起参加社区未来建设!

Spring Cloud Alibaba 2022.0.0.0 版本发布啦!

相关链接

[1]1.6.1 版别

https://github.com/seata/seata/releases

[2]4.9.4版别

github.com/apache/rock…

[3]1.8.6 版别

github.com/alibaba/Sen…

[4]版别相关发版公告

github.com/alibaba/spr…

[5]Spring Cloud 2022.0.0 版别阐明

github.com/spring-clou…

[6]相关采访

mp.weixin.qq.com/s/GKakb5AF_…

[7]官方文档

docs.spring.io/spring-boot…

[8]可观测事实标准 Micrometer 1.10

micrometer.io/docs

[9]Micrometer Tracing

micrometer.io/docs/tracin…

[10]文档阐明

docs.spring.io/spring-boot…

[11]Spring Boot 3.0 版别阐明

github.com/spring-proj…

[12]OpenRewrite recipes

docs.openrewrite.org/reference/r…

[13]The Spring Boot Migrator project

github.com/spring-proj…

[14]Migration support in IntelliJ IDEA

blog.jetbrains.com/idea/2021/0…

[15]示例模块

github.com/alibaba/spr…

[16]Spring 6

github.com/spring-proj…

[17]Spring Boot 3.0

github.com/spring-proj…

[18]Spring Cloud 2022.0.0

github.com/spring-clou…

[19]Spring Boot 3.0 相关用户文档

docs.spring.io/spring-boot…

[20]Liberica Native Image Kit

bell-sw.com/pages/downl…

[21]相应文档

docs.spring.io/spring-boot…

[22]SCA Nacos Example

github.com/alibaba/spr…

[23]OpenFeign阐明文档

docs.spring.io/spring-clou…