Spring Cloud Alibaba 2021.0.1.0 版本发布啦

本文涉及的产品
Serverless 应用引擎 SAE,800核*时 1600GiB*时
性能测试 PTS,5000VUM额度
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: 本次隆重发布的 Spring Cloud Alibaba 2021.0.1.0 版本在 Spring Cloud 2021.0.1、Spring Boot 2.6.3 的基础上对其中包括注册配置中心、分布式消息等在内的众多组件进行重大升级。

作者 | 铖朴


什么是 Spring Cloud Alibaba?


Spring Cloud Alibaba 是由阿里巴巴(后文简称:阿里)中间件团队于 2018 年 7 月开源,为业界提供的一套基于阿里内部分布式技术的一站式微服务构建解决方案。其基于 Spring Cloud 微服务框架标准,针对微服务架构中的服务注册与发现、分布式消息、服务限流降级以及分布式事务等核心模块,都提供了相应的面向业界的成熟解决方案,其与Spring Cloud之间的关系如下图所示:

2.png

依托 Spring Cloud Alibaba,用户仅需要添加一些注解和少量配置,就可以将 Spring Cloud 应用接入阿里微服务解决方案,通过阿里中间件来迅速搭建稳定可靠的分布式应用系统。


新版本预览


本次隆重发布的 Spring Cloud Alibaba 2021.0.1.0 版本在 Spring Cloud 2021.0.1、Spring Boot 2.6.3 的基础上对其中包括注册配置中心、分布式消息等在内的众多组件进行重大升级:


  • Nacos:升级 Nacos 客户端到 1.4.2 版本,修复了 Nacos 1.4.1 所存在的相关问题,支持了 Nacos 服务发现失败容错等相关能力。
  • RocketMQ:升级到了 4.9.2,并将之前项目中的 RocketMQ 单独分支融入到了项目主分支,跟随大版本一起发布迭代,使用户可在最新 Spring Cloud Alibaba 中直接使用 RocketMQ 新支持的批量消息、异步消息回调处理、Push 模式下指定消费起始位等众多新特性。
  • Sentinel:升级到了 1.8.3,除了修复部分之前版本所存在的问题外,还提供了丰富的针对 FeignClient 的容错能力,支持针对全局 FeignClient 配置默认熔断规则,支持对单个 FeignClient 配置特定容错规则以及支持针对单个方法配置熔断规则等能力。
  • Spring Boot:在Spring Boot 2.6.3 版本基础上,支持了 spring.config.import 的应用配置方式,方便用户更友好地在应用中配置和使用 Nacos 配置中心。


除了组件升级,另外也修复了很多之前版本所存在的问题,进一步提升了 Spring Cloud Alibaba 使用的稳定性与健壮性。更多资料可参见发版公告 [1]。


Spring Cloud Alibaba 与 Spring Cloud 和 Spring Boot 当前各版本对应关系可参见文末官网 Wiki 版本说明 [2]。

升级指导


1、版本号


由于 Spring Cloud 版本号经历了一轮从英文名到以年份开头的命名方式的变化,了解到社区内外用户对于 Spring Cloud Alibaba 与 Spring Cloud 版本号之间对应关系经常感到困惑。为了让大家今后在使用 Spring Cloud Alibaba 能便捷的知道其所对应的 Spring Cloud 版本,经过社区核心成员之间在双周会上的讨论以及与 Spring Cloud 社区负责人的沟通后决定,从 2021.0.1.0 开始,Spring Cloud Alibaba 版本将会对应 Spring Cloud 版本, 前三位为 Spring Cloud 版本,最后一位为扩展版本,比如针对Spring Cloud 2021.0.1对应的 Spring Cloud Alibaba 第一个版本的版本号就是 2021.0.1.0,第二个版本的版本号便是 2021.0.1.1。

2、升级操作


如果项目中需要使用 Spring Cloud Alibaba 2021.0.1.0 版本,请在项目中添加如下依赖:


<dependencyManagement>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-dependencies</artifactId>
        <version>2.6.3</version>
        <type>pom</type>
        <scope>import</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-dependencies</artifactId>
        <version>2021.0.1</version>
        <type>pom</type>
        <scope>import</scope>
    </dependency>
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-alibaba-dependencies</artifactId>
        <version>2021.0.1.0</version>
        <type>pom</type>
        <scope>import</scope>
    </dependency>
</dependencyManagement>


注意事项:spring-cloud-starter-alibaba-nacos-config 模块移除了 spring-cloud-starter-bootstrap 依赖,如果你想以旧版的方式使用,你需要手动加上该依赖,现在推荐使用 spring.config.import 方式引入配置。完成以上步骤就能无缝切换到 spring cloud alibaba 2021.0.1.0 版本。03


3、新特性以及使用方式


1、支持 spring.config.import


这里假设有一个配置文件(bootstrap.yml),升级到新版本应该怎么配置呢?


# bootstrap.yml
spring:
  cloud:
    nacos:
      config:
        name: test.yml
        group: DEFAULT_GROUP
        server-addr: 127.0.0.1:8848
        extension-configs:
          - dataId: test01.yml
            group: group_01
          - dataId: test02.yml
            group: group_02
            refresh: false


这两个配置是等价的:


# application.yml
spring:
  cloud:
    nacos:
      config:
        group: DEFAULT_GROUP
        server-addr: 127.0.0.1:8848
  config:
    import:
      - optional:nacos:test.yml  # 监听 DEFAULT_GROUP:test.yml
      - optional:nacos:test01.yml?group=group_01 # 覆盖默认 group,监听 group_01:test01.yml
      - optional:nacos:test02.yml?group=group_02&refreshEnabled=false # 不开启动态刷新
      - nacos:test03.yml # 在拉取nacos配置异常时会快速失败,会导致 spring 容器启动失败


注意事项:

  • 如果使用 spring.config.import 就不能使用 bootstrap.yml/properties 引入配置的方式了 !!!
  • 如果引入了 spring-cloud-starter-alibaba-nacos-config,并且使用 import 方式导入配置, 项目启动时会自动检测是否引入了 nacos: 条目,如果没有 import nacos 条目,会出现如下错误:


The spring.config.import property is missing a nacos: entry
Action:
Add a spring.config.import=nacos: property to your configuration.
  If configuration is not required add spring.config.import=optional:nacos: instead.
  To disable this check, set spring.cloud.nacos.config.import-check.enabled=false.


你可以手动通设置 spring.cloud.nacos.config.import-check.enabled=false 关闭它,但是不建议这么做,这个功能可以帮助你检查是否引入多余依赖

  • 假如想保留以前的使用方式 (bootstrap引入配置),你只需要添加依赖 spring-cloud-starter-bootstrap 依赖,不需要修改一行代码


2、Nacos 容错能力


新增配置项 spring.cloud.nacos.discovery.failure-tolerance-enabled, 设置为 true (默认 false) 开启 nacos 服务发现失败容错能力,该功能会在 nacos 获取实例失败时返回上一次获取的实例,可以在 nacos server 网络不稳定时提供容错能力,不会导致请求全部挂掉。


3、支持 FeignClient 灵活的熔断配置


当 Sentinel 作为 Spring Cloud 断路器实现时,支持为每个 FeignClient 添加断路器配置。
添加依赖:


<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-circuitbreaker-sentinel</artifactId>
</dependency>


这里有两个 FeignClient:


@FeignClient(value = "user", fallback = UserFallback.class)
public interface UserClient {
    @GetMapping("/{success}")
    String success(@PathVariable Boolean success);
}
@FeignClient(value = "order", fallback = OrderFallback.class)
public interface OrderClient {
    @GetMapping("/{success}")
    String success(@PathVariable Boolean success);
    @GetMapping("/{success}")
    String error(@PathVariable Boolean success);
}


现在有如下需求:

  1. 想要对全局的 FeignClient 配置一个默认熔断规则。
  2. 想要对 user FeignClient 配置熔断规则。
  3. 想要对 order FeignClient 的指定方法(error)配置熔断规则。


添加以下配置:


feign:
   circuitbreaker:
      enabled: true
   sentinel:
      default-rule: default # 全局规则名称
      rules:
         # 全局配置,这些参数的意思请查看 com.alibaba.csp.sentinel.slots.block.degrade.DegradeRule
         # 可配置多条规则
         default:
            - grade: 2
              count: 1
              timeWindow: 1
              statIntervalMs: 1000
              minRequestAmount: 5
            - grade: 2
              count: 1
         # 针对 user FeignClient
         user:
            - grade: 2
              count: 1
              timeWindow: 1
              statIntervalMs: 1000
              minRequestAmount: 5
         # 针对 order FeignClient error 方法,注意中括号,不然会解析出来的值会不一致
         "[order#error(Boolean)]":
            - grade: 2
              count: 1
              timeWindow: 1
              statIntervalMs: 1000
              minRequestAmount: 5


该功能还支持从配置中心动态刷新,可以将上述配置放入配置中心(nacos,consul),修改规则会立刻生效,如果不需要该功能可以通过 feign.sentinel.enable-refresh-rules=false 来禁用它。


注意事项:如果你使用的是 spring-cloud-starter-alibaba-sentinel,请不要配置 feign.sentinel.enable=true,会使配置失效。


4、升级建议


  1. 在 spring boot 2.6 之后默认开启了禁止循环引入,建议大家不要关闭,这是一种不好的编码习惯,如果你的项目里出现了循环引用,请选择重构它。
  2. 抛弃 bootstrap 引入配置的方式,使用 spring.config.import 方式引入配置,spring boot 2.4 对这一块做了很大的优化工作,不再需要全量启动一个容器来刷新配置。

回顾展望


经过三年多的飞速发展,截止到当前,Spring Cloud Alibaba 共发布了 27 个版本,在 GitHub 上的累计 stars 数目超过了 2.15w,fork 数达到了 6.7k,用户数达到了 21k 之多,各项关键数据遥遥领先国内外各大云厂商推出的同类开源微服务产品。
image.gif3.png

除了支撑阿里巴巴经济体日常复杂的微服务应用场景,Spring Cloud Alibaba 也被数千家外部企业用户在生产场景中广泛使用。
image.gif4.png

未来 Spring Cloud Alibaba 会继续对齐 Spring Cloud 主流版本发展演进,近期会同时支持以 Spring Cloud 2021.x 和 Hoxton 两个当前主流版本对应的 Spring Cloud Alibaba 2021.x 和 2.2.X 版本迭代。社区未来除了会持续为 Spring Cloud 应用使用阿里巴巴微服务解决方案中的 Nacos、Sentinel、RocketMQ 等组件的稳定性和易用性上持续努力外,为 Spring Cloud 应用提供开源的服务契约、标签路由等微服务治理能力上支持努力,非常欢迎有兴趣的同学加入我们一起做一些有意思的事情!


社区建设


1、开发角色


Spring Cloud Alibaba 项目开发者包含 Steering Committee Member、Committer、Contributor 三种角色,每种角色的标准定义如下。


1、Steering Committee Member


Steering Committee 作为 Spring Cloud Alibaba 项目的技术发展指导委员会,其成员是对Spring Cloud Alibaba项目的演进和发展做出显著贡献的个人。具体包含以下的标准:


  • 完成多个关键模块或者工程的设计与开发,是项目的核心开发人员;
  • 持续的投入和激情,能够积极参与社区、官网、issue、PR 等项目相关事项的维护;
  • 在社区中具有有目共睹的影响力,能够代表 Spring Cloud Alibaba 参加重要的社区会议和活动;
  • 具有培养 Committer 和 Contributor 的意识和能力;


2、Committer


Committer 是具有仓库写权限的个人,包含以下的标准:

  • 能够在长时间内做持续贡献 issue、PR 的个人;
  • 参与 issue 列表的维护及重要 feature 的讨论;
  • 参与 code review;


3、Contributor


Contributor 是对项目有贡献的个人,标准为:

  • 提交过 PR 并被合并;


2、开发团队


本页面展示了 Spring Cloud Alibaba 的开发团队成员,我们一直都在持续扩充中,欢迎加入社区:)

Steering Committee Member 成员:

姓名 Github 账号 角色 联系方式 组织
方剑 fangjian0423 Steering Committee Member fangjian0423@gmail.com 阿里巴巴
肖京 flystar32 Steering Committee Member flystar32@163.com 阿里巴巴
马昕曦 mercyblitz Steering Committee Member mercyblitz@gmail.com 自由职业
任浩军 HaojunRen Steering Committee Member 1394997@qq.com Nepxion社区
陈曦 theonefx Steering Committee Member chenxilzx1@gmail.com 阿里巴巴


Committer 成员:

姓名 Github账号 角色 联系方式 组织
廖春涛 chuntaojun Committer liaochuntao@live.com 腾讯
余黄彬 yuhuangbin Committer danielyu96@163.com ~
赵奕豪 sczyh30 Committer sczyh16@gmail.com 阿里巴巴
张开兆 zkzlx Committer kiss_maple@163.com 得物
饶子昊 steverao Committer zihaorao@126.com 阿里巴巴
刘梁文 DanielLiu1123 Committer llw599502537@gmail.com 在校学生
冷冷 lltx Committer wangiegie@gmail.com ~
echooymxq echooymxq Committer echooy.mxq@gmail.com ~



3、双周会


为了提供一个社区成员之间进行沟通交流的时间和机会,Spring Cloud Alibaba 社区从2021 年 12 月决定正式启动双周会制度,到目前为止已经持续了 4 次。在双周会中,社区核心开发成员会对社区近期的 issues、PR 以及社区未来发展规划进行介绍,让社区内外同学更好地了解和使用 Spring Cloud Alibaba。Spring Cloud Alibaba 社区的双周会无特殊情况一般定在每隔一周的星期四晚上 8 点进行,会议开始前一周内社区会及时将本次会议接入方式在 GitHub 相关 issues [3] 上进行同步,欢迎社区内外的同学有时间多多参与。


4、新 Committer 介绍


Spring Cloud Alibaba 社区近几个月涌现了一些积极参与社区维护迭代的外部贡献者,在此,向他们表示感谢!另外,对于其中多次提交有重要贡献 feature 的同学,社区按照推荐制度在近期双周会中正式提名其为 Committer,在此也向其表示祝贺。欢迎更多外部同学关注 Spring Cloud Alibaba 开源社区和贡献开源社区。
image.gif5.png

Spring Cloud Alibaba 企业版


除了开源的 Spring Cloud Alibaba 以外,针对企业级用户复杂繁重的微服务治理诉求,,阿里云中间件团队推出的阿里云微服务引擎(Microservices Engine,MSE)提供了包括全链路灰度、无损上下线、服务预热、离群实例摘除等在内的大量企业级微服务治理功能,让用户可不改一行代码即可将应用接入 MSE 便捷、低成本地拥有企业级微服务治理能力。除了微服务治理,MSE 还提供了企业级的 Nacos 注册配置中心和企业级云原生网关等众多产品,帮助企业用户迅速拥抱云原生微服务。


相关链接


[1]发版公告:https://github.com/alibaba/spring-cloud-alibaba/releases/tag/2021.0.1.0 

[2]官网 Wiki 版本说明:https://github.com/alibaba/spring-cloud-alibaba/wiki/%E7%89%88%E6%9C%AC%E8%AF%B4%E6%98%8E 

[3]GitHub 相关 issues:https://github.com/alibaba/spring-cloud-alibaba/issues/2333

[4]过往的会议纪要:https://www.yuque.com/spring-cloud-alibaba/xgu1l3/pgmd2a


点击了解更多 Spring Cloud Alibaba 企业版相关详情~

https://www.aliyun.com/product/aliware/mse

相关实践学习
基于MSE实现微服务的全链路灰度
通过本场景的实验操作,您将了解并实现在线业务的微服务全链路灰度能力。
相关文章
|
12天前
|
SpringCloudAlibaba API 开发者
新版-SpringCloud+SpringCloud Alibaba
新版-SpringCloud+SpringCloud Alibaba
|
2月前
|
资源调度 Java 调度
Spring Cloud Alibaba 集成分布式定时任务调度功能
定时任务在企业应用中至关重要,常用于异步数据处理、自动化运维等场景。在单体应用中,利用Java的`java.util.Timer`或Spring的`@Scheduled`即可轻松实现。然而,进入微服务架构后,任务可能因多节点并发执行而重复。Spring Cloud Alibaba为此发布了Scheduling模块,提供轻量级、高可用的分布式定时任务解决方案,支持防重复执行、分片运行等功能,并可通过`spring-cloud-starter-alibaba-schedulerx`快速集成。用户可选择基于阿里云SchedulerX托管服务或采用本地开源方案(如ShedLock)
|
12天前
|
人工智能 开发框架 Java
重磅发布!AI 驱动的 Java 开发框架:Spring AI Alibaba
随着生成式 AI 的快速发展,基于 AI 开发框架构建 AI 应用的诉求迅速增长,涌现出了包括 LangChain、LlamaIndex 等开发框架,但大部分框架只提供了 Python 语言的实现。但这些开发框架对于国内习惯了 Spring 开发范式的 Java 开发者而言,并非十分友好和丝滑。因此,我们基于 Spring AI 发布并快速演进 Spring AI Alibaba,通过提供一种方便的 API 抽象,帮助 Java 开发者简化 AI 应用的开发。同时,提供了完整的开源配套,包括可观测、网关、消息队列、配置中心等。
569 9
|
10天前
|
前端开发 Java Spring
【非降版本解决】高版本Spring boot Swagger 报错解决方案
【非降版本解决】高版本Spring boot Swagger 报错解决方案
|
2月前
|
人工智能 前端开发 Java
【实操】Spring Cloud Alibaba AI,阿里AI这不得玩一下(含前后端源码)
本文介绍了如何使用 **Spring Cloud Alibaba AI** 构建基于 Spring Boot 和 uni-app 的聊天机器人应用。主要内容包括:Spring Cloud Alibaba AI 的概念与功能,使用前的准备工作(如 JDK 17+、Spring Boot 3.0+ 及通义 API-KEY),详细实操步骤(涵盖前后端开发工具、组件选择、功能分析及关键代码示例)。最终展示了如何成功实现具备基本聊天功能的 AI 应用,帮助读者快速搭建智能聊天系统并探索更多高级功能。
608 2
【实操】Spring Cloud Alibaba AI,阿里AI这不得玩一下(含前后端源码)
|
9天前
|
人工智能 前端开发 Java
Spring Cloud Alibaba AI,阿里AI这不得玩一下
🏀闪亮主角: 大家好,我是JavaDog程序狗。今天分享Spring Cloud Alibaba AI,基于Spring AI并提供阿里云通义大模型的Java AI应用。本狗用SpringBoot+uniapp+uview2对接Spring Cloud Alibaba AI,带你打造聊天小AI。 📘故事背景: 🎁获取源码: 关注公众号“JavaDog程序狗”,发送“alibaba-ai”即可获取源码。 🎯主要目标:
17 0
|
2月前
|
缓存 NoSQL Java
SpringBoot的三种缓存技术(Spring Cache、Layering Cache 框架、Alibaba JetCache 框架)
Spring Cache 是 Spring 提供的简易缓存方案,支持本地与 Redis 缓存。通过添加 `spring-boot-starter-data-redis` 和 `spring-boot-starter-cache` 依赖,并使用 `@EnableCaching` 开启缓存功能。JetCache 由阿里开源,功能更丰富,支持多级缓存和异步 API,通过引入 `jetcache-starter-redis` 依赖并配置 YAML 文件启用。Layering Cache 则提供分层缓存机制,需引入 `layering-cache-starter` 依赖并使用特定注解实现缓存逻辑。
358 1
SpringBoot的三种缓存技术(Spring Cache、Layering Cache 框架、Alibaba JetCache 框架)
|
2月前
|
Java 微服务 Spring
SpringBoot+Vue+Spring Cloud Alibaba 实现大型电商系统【分布式微服务实现】
文章介绍了如何利用Spring Cloud Alibaba快速构建大型电商系统的分布式微服务,包括服务限流降级等主要功能的实现,并通过注解和配置简化了Spring Cloud应用的接入和搭建过程。
SpringBoot+Vue+Spring Cloud Alibaba 实现大型电商系统【分布式微服务实现】
|
2月前
|
Dubbo Java 调度
揭秘!Spring Cloud Alibaba的超级力量——如何轻松驾驭分布式定时任务调度?
【8月更文挑战第20天】在现代微服务架构中,Spring Cloud Alibaba通过集成分布式定时任务调度功能解决了一致性和可靠性挑战。它利用TimerX实现任务的分布式编排与调度,并通过`@SchedulerLock`确保任务不被重复执行。示例代码展示了如何配置定时任务及其分布式锁,以实现每5秒仅由一个节点执行任务,适合构建高可用的微服务系统。
53 0
|
9天前
|
SQL 监控 druid
springboot-druid数据源的配置方式及配置后台监控-自定义和导入stater(推荐-简单方便使用)两种方式配置druid数据源
这篇文章介绍了如何在Spring Boot项目中配置和监控Druid数据源,包括自定义配置和使用Spring Boot Starter两种方法。
下一篇
无影云桌面