Spring 社区的首个国产开源项目顺利毕业

2019 年 8 月 17 日

Spring 社区的首个国产开源项目顺利毕业

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


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


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


SpringCloudAlibaba 毕业过程中的一些小插曲


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


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


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


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


官方文章解读



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


集成到 SpringCloudReleaseTrain 带来的不便:


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

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


以下的这些合作,其实与在不在 SpringCloudReleaseTrain 中没有关系:


  • SpringCloudTeam会参与到项目中,进行代码review帮助更好地集成到SpringCloud。

  • SpringCloudAlibabaStarter会加入到start.spring.io中,供用户选择。

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


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


  • 从SpringCloud的github中迁移并不是意味着这些项目的开发和维护模式有改变,SpringCloudAlibabaTeam&SpringCloudTeam仍然维护着项目。

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

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

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


本次毕业版本的 releasenote


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


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


3、Sentinel


  • sentinel相关依赖的版本更新至1.6.3。Sentinel各版本的release信息参考这里

  • issue615:支持SpringCloudGateway,spring-cloud-alibaba-sentinel-zuul重命名为spring-cloud-alibaba-sentinel-gateway。该模块实现了Sentinel适配网关(SpringCloudGateway,NetflixZuul)相关的逻辑

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

  • issue626:SentinelOpenFeign场景下解决了接口继承场景下调用父类接口方法出错的bug

  • issue782:SentinelOpenFeign场景下解决了接口中存在default方法下调用default方法出错的bug

  • issue741、issue615:新增网关和http-method-specify相关的配置

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

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

  • issue265:添加SentinelHealthIndicator用于查询Sentinel的健康状态


4、NacosDiscovery


  • nacos-client版本更新至1.1.1。Nacos各版本的release信息参考这里

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

  • issue669:添加NacosRule支持权重的Ribbon路由规则

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

  • issue708:支持与SpringCloudConfig共同使用

  • issue650:适配ServerIntrospector,可获取metadata以及secure信息

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


5、NacosConfig


  • nacos-clinet版本更新至1.1.1。Nacos各版本的release信息参考这里

  • issue652:修复NacosConfigEndpoint线程不安全的bug


6、RocketMQBinder


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

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


7、DubboSpringCloud


  • dubbo版本更新至2.7.3。Dubbo各版本的release信息参考这里

  • issue589:ip获取策略使用SpringCloud官方的InetUtils工具获取

  • issue592:SpringCloud注册中心配置spring-cloud://localhost成为可选项,默认直接沿用原生的SpringCloud注册中心

  • issue623:为服务实例的变化新增监听机制

  • issue591:修复某些场景下启动报NPE的bug

  • issue600:不再强依赖spring-boot-actuator,成为可选依赖


8、Seata


  • seata版本更新至0.7.1。Seata各版本的release信息参考这里

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


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


Roadmap


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


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

  • 服务查询、管理

  • 配置管理

  • 限流降级等

  • 项目管理/监控


2、参考 SpringCloudAzurePlaygroundhttp://azure-spring-cloud.azurewebsites.net/,创造 SpringCloudAlibabaPlayground,把一些最佳实践,视频教程,自动生成项目等功能放上去。


3、增加 SpringCloudAlibaba 最佳实践项目。


4、针对 SpringCloudAlibaba 各种特性,开发对应的实战 Demo。


5、替换 SpringCloud 服务调用客户端 OpenFeign&Ribbon。开发更通用的服务调用客户端,替换 SpringCloud 服务调用客户端 OpenFeign&Ribbon。


Committer 机制


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


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


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


3、参与 codereview


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


毕业后用户侧代码修改


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


1、包名 packagename


2、版本号 versionnumber


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


以使用 SpringCloudAlibabaBom 和 SpringCloudNacosDiscovery 为例,了解修改点到底有哪些:


孵化器对应的 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 上提供了一个项目,详情参考这里


用于对比毕业版本跟孵化器版本开发项目的区别。该项目使用了 NacosConfig&NacosDiscovery&Sentinel 功能,master 分支是毕业版本,incubator 分支是孵化器版本。这是使用 diff 命令比较两个分支代码的不同点:


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


版本的对应关系:



项目地址参考这里


作者介绍


方剑,花名洛夜,GitHubID@fangjian0423,开源爱好者,阿里巴巴高级开发工程师,阿里云产品 EDAS 开发,SpringCloudAlibaba 开源项目负责人。


本文转载自云栖社区


原文链接


https://yq.aliyun.com/articles/712296


2019 年 8 月 17 日 08:007644
用户头像

发布了 25 篇内容, 共 53466 次阅读, 收获喜欢 47 次。

关注

评论

发布
暂无评论
发现更多内容

《中国区块链产业园15强名录》

CECBC区块链专委会

MySql的Dockerfile编写

玏佾

统一物品编码 破解追溯“断链”困局

CECBC区块链专委会

一口气讲透一致性哈希(Hash),助力「码农变身」

码农神说

一致性算法 一致性哈希 一致性hash 一致性Hash算法

ServerlessDays China:无服务器的未来

Michael Yuan

云计算 Serverless 容器 虚拟机 webassembly

2020,是中国SaaS行业的机遇之年?

ToB行业头条

火焰图:全局视野的Linux性能剖析

Marionxue

你有认真了解过自己的“Java对象”吗

海星

Java JVM

架构师是怎样炼成的 6-1

闷骚程序员

Worktile完成新一轮融资,将发力研发管理赛道

Worktile

融资

微信小程序使用GoEasy实现websocket实时通讯

GoEasy消息推送

小程序 websocket 即时通讯

Redis基础:redis特点

奈学教育

redis

将设计模式应用到日常的curd中—分离关联查询

LSJ

Java 设计

解读:新基建为区块链带来的新机遇

CECBC区块链专委会

java 后端博客系统文章系统——No4

猿灯塔

话题讨论|在编程中,有哪些好习惯是应该一直坚持下去的?

InfoQ写作平台

写作平台 话题讨论 话题

企业的数字化转型探索

松子(李博源)

企业架构 数字化 企业数字化转型

猿灯塔:spring Boot Starter开发及源码刨析(四)

猿灯塔

Java 猿灯塔 spring Boot Starter

第六周作业

赵龙

数据库周刊32丨Oracle自治数据库大动作;腾讯云MySQL 8.0上线;华为数据库工程师认证发布;update引起业务卡顿;PostgreSQL安全加固;openGauss单机安装;中国DBA联盟"ACDU"邀您加入……

墨天轮

MySQL 数据库 oracle postgresql

Redis基础:redis特点

古月木易

redis

支付公司如何赚钱?支付网关如何设计?

诸葛小猿

微信 支付宝 聚合支付 第三方支付 支付网关

为什么单元测试不是持续交付的唯一答案

持续集成 单元测试

啃碎并发(10):内存模型之内部原理

猿灯塔

快来!我从源码中学习到了一招Dubbo的骚操作!

why技术

源码 面试 dubbo 动态代理

Spring Boot 2.3.0正式发布:优雅停机、配置文件位置通配符新特性一览

YourBatman

spring springboot

练习 6-1

闷骚程序员

Markdown工具Typora结合gitee码云图床自动上传云端图片

Flychen

Typora markdown gitee

​中国SaaS处在什么阶段?

ToB行业头条

【融云分析】融云实时音视频 SDK 对智能硬件的视频适配

Geek_116789

我的程序跑了60多小时,就是为了让你看一眼JDK的BUG导致的内存泄漏。

why技术

Java 源码 jdk 并发 bug

Spring 社区的首个国产开源项目顺利毕业-InfoQ