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 版本依赖:
毕业对应的版本依赖:
我们在 GitHub 上提供了一个项目,详情参考这里。
用于对比毕业版本跟孵化器版本开发项目的区别。该项目使用了 NacosConfig&NacosDiscovery&Sentinel 功能,master 分支是毕业版本,incubator 分支是孵化器版本。这是使用 diff 命令比较两个分支代码的不同点:
结论:我们发现只有 pom 里的包名和版本号不一致,代码层面无需任何修改。
版本的对应关系:
项目地址参考这里。
作者介绍:
方剑,花名洛夜,GitHubID@fangjian0423,开源爱好者,阿里巴巴高级开发工程师,阿里云产品 EDAS 开发,SpringCloudAlibaba 开源项目负责人。
本文转载自云栖社区。
原文链接:
https://yq.aliyun.com/articles/712296
评论