Spring 社区的首个国产开源项目顺利毕业了(Spring Cloud Alibaba )

Spring Cloud Alibaba 于 2018年7月27日 在 Spring Cloud 孵化器仓库提交第一次代码,到 2019年8月1日 在 Alibaba 仓库发布第一个毕业版本,时间将近整整一年。

一年时间,Spring Cloud Alibaba 完成了从 Spring Cloud 最默默无闻的项目到 Spring Cloud 最火项目的蜕变,并且从孵化器仓库毕业了!

Spring Cloud Alibaba 的正式毕业离不开社区的帮助,非常感谢 Spring Cloud Alibaba 的 contributor,也非常感谢社区开源爱好者们创建的 issue,每一个 issue 都是对 Spring Cloud Alibaba 的帮助。


Spring Cloud Alibaba 毕业过程中的一些小插曲

1、在 5 月底的时候,Spring Cloud Alibaba Team 跟 Spring Cloud Team 有过一次毕业的沟通,并且准备在 Spring Cloud Hoxton 正式发布的时候宣布 Spring Cloud Alibaba 毕业。只不过后来 Spring Cloud 官方调整了项目策略,需要进行仓库迁移。双方 team 后续还因此开了一个视频会议,Spring Cloud Alibaba 因此提前毕业。

2、Spring Cloud Team 希望毕业后的 starter 命名方式跟 spring boot starter 规定的格式一致,以 alibaba-<X>-spring-cloud-starter 的格式进行命令。考虑到孵化器的 starter 都是以 spring-cloud-starter-alibaba-<X> 开头,Spring Cloud Alibaba 并不想破坏原有的规则。最终双方讨论了好多次才决定沿用老的 starter 命名方式。

3、在仓库迁移后的几天时间内,有社区的开源爱好者专门创建 issue 提问为何离开 spring cloud 仓库,Spring Cloud Alibaba 被各种质疑。后来 Spring Cloud Leader - Spencer Gibb 在 issue 上回复进行了解释。

4、Spring Cloud Alibaba 本来计划是 6 月份发布毕业版本,结果拖到了现在。为了引起不必要的舆论风险,我们一直在等待 Spring Cloud Team 官方的公告发布,期间跟 Spring Cloud Team 沟通了好多个晚上(有 12 小时时差)。


官方文章解读

官方文章内容写得有点多,我们翻译一下并做个简单的总结:

集成到 Spring Cloud Release Train 带来的不便:

项目的维护者不能自行发版,从而无法与项目集成的技术组件的 roadmap 保持一致,必须等到 Spring Cloud 的下一个 Release Train 才能发布新的版本更新集成的技术组件。 

项目的维护者没有办法看到关键的统计数据,如 github 中的关键数据, 以及在依赖被下载了多少次。

以下的这些合作,其实与在不在 Spring Cloud Release Train 中没有关系:

Spring Cloud Team 会参与到项目中,进行代码 review 帮助更好地集成到 Spring Cloud 。

Spring Cloud Alibaba Starter 会加入到 start.spring.io 中,供用户选择。

Spring Team 会将 Spring Cloud Alibaba 项目放在官方介绍页上https://spring.io/projects/spring-cloud-alibaba,介绍项目重要的一些发版和功能特性。

仓库迁移对于开发者来说,实际意味着什么?

从 Spring Cloud 的 github 中迁移并不是意味着这些项目的开发和维护模式有改变,Spring Cloud Alibaba Team & Spring Cloud Team 仍然维护着项目。

新的模式意味着 groupId 会发生改变,甚至有些项目的 artifactId 会改变,项目中的 package name 也会发生变化。需要用户侧代码修改。

开发人员需要明确地在开发中指明依赖的版本,不能通过 Spring Cloud BOM 继承依赖。

作为先行者,Spring Cloud Alibaba 将会首先遵循新的策略,Spring Cloud Alibaba 在毕业这个重大的时机迁移是一个合适的时间。未来大家会看到更多的 组件从 Spring Cloud Release Train 中迁移出去。

本次毕业版本的 release note

1、Greenwich 对应的版本支持此 Greenwich.SR2 版本

2、Finchley 对应的版本支持此 Finchley.SR4 版本

3、Sentinel

sentinel 相关依赖的版本更新至 1.6.3。Sentinel 各版本的 release 信息:https://github.com/alibaba/Sentinel/releases

#615:支持 Spring Cloud Gateway,spring-cloud-alibaba-sentinel-zuul重命名为spring-cloud-alibaba-sentinel-gateway。该模块实现了 Sentinel 适配网关(Spring Cloud Gateway, Netflix Zuul)相关的逻辑

#614:支持 WebFlux,spring-cloud-alibaba-starter-sentinel内部分别适配了 WebServlet 和 WebFlux

#626:Sentinel OpenFeign 场景下解决了接口继承场景下调用父类接口方法出错的 bug

#782:Sentinel OpenFeign 场景下解决了接口中存在 default 方法下调用 default 方法出错的 bug

#741 #615:新增网关和http-method-specify相关的配置

#716:优化了SlotChainBuilder的加载逻辑,确保非网关场景下 HotParamSlotChainBuilder 生效,网关场景下SlotChainBuilder生效

#707:删除 DataSource 相关的加载日志,改由 Sentinel 自身的 SPI 实现(未来实现) 

#265:添加SentinelHealthIndicator用于查询 Sentinel 的健康状态

Nacos Discovery

nacos-client 版本更新至 1.1.1。Nacos 各版本的 release 信息:https://github.com/alibaba/nacos/releases

#765:添加心跳相关的配置参数。包括 心跳的周期、心跳超时时间以及实例删除的超时时间 

#669:添加NacosRule支持权重的 Ribbon 路由规则

#728:支持 ServiceRegistryEndpoint对当前应用服务状态的操作/查询

 #708:支持与 Spring Cloud Config 共同使用

#650:适配 ServerIntrospector,可获取 metadata 以及 secure 信息

#644:NacosWatch删除内部逻辑,只进行HeartbeatEvent事件的发送

Nacos Config

nacos-clinet 版本更新至 1.1.1。Nacos 各版本的 release 信息:https://github.com/alibaba/nacos/releases

#652:修复NacosConfigEndpoint线程不安全的 bug

RocketMQ Binder

#541:适配MessageSource,consumer 端可以注入 PollableMessageSource进行消息的拉取

#709:解决不同 jvm 下 instanceName 相同导致 rebalance 失败的 bug

Dubbo Spring Cloud

dubbo 版本更新至 2.7.3。Dubbo 各版本的 release 信息:https://github.com/apache/dubbo/releases

#589:ip 获取策略使用 Spring Cloud 官方的InetUtils工具获取

#592:Spring Cloud 注册中心配置spring-cloud://localhost成为可选项,默认直接沿用原生的 Spring Cloud 注册中心

#623:为服务实例的变化新增监听机制 

#591:修复某些场景下启动报 NPE 的 bug

#600:不再强依赖 spring-boot-actuator,成为可选依赖 

Seata

seata 版本更新至 0.7.1。Seata 各版本的 release 信息,点击这里

#686:修复负载均衡的 FeignClient 场景下 xid 传递失败的 bug


Thanks for the contributors: @Rivers-Shall, @ly641921791, @JevonYang, @cdfive, @eacdy, @pyhblacksky, @george510257, @AbelSara, @slievrly, @pigxcloud, @lovepoem, @liudaomanbu, @lujian0571, @jsbxyyx, @pengzai170, @hero-zhanghao, @wzlee, @xingfudeshi


Roadmap

Spring Boot Admin 是一个开源社区项目,用于管理和监控 SpringBoot 应用程序。但是它没有跟 Spring Cloud 做深度的整合。我们希望做一个 Spring Cloud Admin,它能提供如下功能:

增加服务治理控制台,整合微服务控制能力

服务查询、管理

配置管理

限流降级等

项目管理/监控

参考 Spring Cloud Azure Playground http://azure-spring-cloud.azurewebsites.net/ ,创造 Spring Cloud Alibaba Playground,把一些最佳实践,视频教程,自动生成项目等功能放上去。

增加 Spring Cloud Alibaba 最佳实践项目。

针对 Spring Cloud Alibaba 各种特性,开发对应的实战 Demo。

替换 Spring Cloud 服务调用客户端 OpenFeign & Ribbon。开发更通用的服务调用客户端,替换 Spring Cloud 服务调用客户端 OpenFeign & Ribbon。


Committer 机制

项目迁移到 Alibaba 自身的 GitHub 仓库后,不像在 spring-cloud-incubator 仓库中那样没有权限发展 committer。我们现在有权限发展 contributor 成为 committer。任何人只要在 Spring Cloud Alibaba 项目上提交了 Pull Request 并且被 merge,就可以成为 contributor;contributor 晋升为为 committer,需要这些条件:

1、至少提交 5 个有分量的 Pull Request

2、参与 issue 列表的维护及重要 feature 的讨论

3、参与 code review

希望有越来越多的开源爱好者能够成为 Spring Cloud Alibaba 的 contributor 或 committer,让我们共同完善 Spring Cloud 生态。


毕业后用户侧代码修改

仓库迁移必定涉及到代码修改。我们总结修改点有 3 点:

1、包名 package name

2、版本号 version number

3、如果用到了 Spring Cloud Alibaba 内部类,需要 reimport 这些类(少部分情况才需要改,大部分情况这些类都被 AutoConfiguration 屏蔽了)

以使用 Spring Cloud Alibaba Bom 和 Spring Cloud Nacos Discovery 为例,了解修改点到底有哪些:


孵化器对应的 bom 和 starter 版本依赖:

<dependency>

    <groupId>org.springframework.cloud</groupId>

    <artifactId>spring-cloud-alibaba-dependencies</artifactId>

    <version>0.9.0.RELEASE</version>

    <type>pom</type>

    <scope>import</scope>

</dependency>

<dependency>

    <groupId>org.springframework.cloud</groupId>

    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>

</dependency>

毕业对应的版本依赖:

<dependency>

    <groupId>com.alibaba.cloud</groupId>

    <artifactId>spring-cloud-alibaba-dependencies</artifactId>

    <version>2.1.0.RELEASE</version>

    <type>pom</type>

    <scope>import</scope>

</dependency>

<dependency>

    <groupId>com.alibaba.cloud</groupId>

    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>

</dependency>

我们在 GitHub 上提供了一个项目 ,点击这里,了解更多,用于对比毕业版本跟孵化器版本开发项目的区别。该项目使用了 Nacos Config & Nacos Discovery & Sentinel 功能,master 分支是毕业版本,incubator 分支是孵化器版本。这是使用 diff 命令比较两个分支代码的不同点:

结论: 我们发现只有 pom 里的包名和版本号不一致,代码层面无需任何修改。

版本的对应关系:

版本的对应关系

项目地址:https://github.com/alibaba/spring-cloud-alibaba

原文地址:https://www.v2tn.com/content/5d4a871324aa9a00017d24fe

了解更多技术,扫一扫关注我们
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 157,298评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,701评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 107,078评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,687评论 0 202
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,018评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,410评论 1 211
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,729评论 2 310
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,412评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,124评论 1 239
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,379评论 2 242
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,903评论 1 257
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,268评论 2 251
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,894评论 3 233
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,014评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,770评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,435评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,312评论 2 260