Spring Cloud Alibaba 2021.0.1.0 版本发布啦

本文涉及的产品
服务治理 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实现微服务的全链路灰度
通过本场景的实验操作,您将了解并实现在线业务的微服务全链路灰度能力。
相关文章
|
7天前
|
负载均衡 Java API
Java一分钟之-Spring Cloud OpenFeign:声明式服务调用
【6月更文挑战第9天】Spring Cloud OpenFeign是声明式服务调用库,简化了微服务间调用。通过动态代理,它允许开发者用Java接口调用HTTP服务,支持服务发现、负载均衡。本文介绍了OpenFeign的基本概念,展示了如何添加依赖、开启客户端和定义服务接口。还讨论了接口调用失败、超时重试和日志配置等问题及其解决方案,并提供了自定义Feign配置的代码示例。通过学习,读者可以更好地在微服务架构中使用OpenFeign进行服务通信。
159 4
|
2天前
|
Java 数据库 开发者
深入解析 Spring Cloud Seata:分布式事务的全面指南
深入解析 Spring Cloud Seata:分布式事务的全面指南
12 1
|
2天前
|
监控 Java API
深入解析 Spring Cloud Sentinel:分布式系统流量控制与熔断降级的全面指南
深入解析 Spring Cloud Sentinel:分布式系统流量控制与熔断降级的全面指南
5 0
深入解析 Spring Cloud Sentinel:分布式系统流量控制与熔断降级的全面指南
|
2天前
|
Java Nacos 数据格式
Spring Cloud Nacos 详解:服务注册与发现及配置管理平台
Spring Cloud Nacos 详解:服务注册与发现及配置管理平台
14 3
|
2天前
|
负载均衡 Java API
Spring Cloud Gateway 详解:构建高效的API网关解决方案
Spring Cloud Gateway 详解:构建高效的API网关解决方案
5 0
|
4天前
|
负载均衡 前端开发 Java
OpenFeign:Spring Cloud声明式服务调用组件
该文本是关于OpenFeign在Spring Cloud中的使用的问答总结。涉及的问题包括:OpenFeign是什么,Feign与OpenFeign的区别,如何使用OpenFeign进行远程服务调用,OpenFeign的超时控制以及日志增强。OpenFeign被描述为Spring官方的声明式服务调用和负载均衡组件,它支持使用注解进行接口定义和服务调用,如@FeignClient和@EnableFeignClients。OpenFeign与Feign的主要区别在于OpenFeign支持Spring MVC注解。超时控制通过Ribbon进行设置,默认超时时间为1秒。
|
6天前
|
Java API 开发者
Java一分钟之-Spring Cloud Gateway:API网关
【6月更文挑战第10天】Spring Cloud Gateway是Spring Cloud生态中的API网关组件,基于Spring Framework 5、Reactor和Spring Boot 2.0,支持响应式编程。它提供路由转发、过滤器链(包括预处理、路由和后处理)和断言功能。快速入门涉及添加相关依赖和配置路由规则。常见问题包括路由冲突、过滤器顺序和性能瓶颈。通过动态路由和过滤器示例,展示了其灵活性。Spring Cloud Gateway是微服务架构的有力工具,可提升系统稳定性和开发效率。
111 0
|
7天前
|
监控 Java UED
Java一分钟之-Spring Cloud Netflix Hystrix:容错管理
【6月更文挑战第9天】Spring Cloud Hystrix是用于微服务容错管理的库,通过断路器模式防止服务雪崩。本文介绍了Hystrix的基本概念,如断路器、线程隔离和fallback机制,并展示了如何快速上手,包括添加依赖、启用注解和编写Hystrix命令。此外,还讨论了常见问题(如断路器打开、资源泄漏和不当的Fallback策略)及其解决方案。通过自定义Hystrix指标监控,可以进一步优化系统性能。理解Hystrix工作原理并适时调整配置,对于构建健壮的微服务至关重要。
113 3
|
7天前
|
缓存 负载均衡 Java
Java一分钟之-Spring Cloud Netflix Ribbon:客户端负载均衡
【6月更文挑战第9天】Spring Cloud Netflix Ribbon是客户端负载均衡器,用于服务间的智能路由。本文介绍了Ribbon的基本概念、快速入门步骤,包括添加依赖、配置服务调用和使用RestTemplate。此外,还讨论了常见问题,如服务实例选择不均、超时和重试设置不当、服务列表更新不及时,并提供了相应的解决策略。最后,展示了如何自定义负载均衡策略。理解并正确使用Ribbon能提升微服务架构的稳定性和效率。
75 3
|
8天前
|
安全 Java 开发者
Java一分钟之-Spring Cloud Netflix Eureka:服务注册与发现
【6月更文挑战第8天】Spring Cloud Eureka是微服务架构的关键,提供服务注册与发现功能。本文讲解Eureka工作原理、配置、常见问题及解决方案。Eureka包含Server(管理服务状态)和Client(注册服务实例并发现服务)。快速入门包括启动Eureka Server和创建Eureka Client。常见问题涉及服务注册不上、服务下线和客户端注册信息不准确,可通过检查网络、理解自我保护机制和配置元数据解决。此外,文中还提及健康检查、安全配置和集群部署等高级实践,以增强系统健壮性和扩展性。
55 8