Spring 社区的首个国产开源项目顺利毕业
相信大家对上周的 《来自 Spring Cloud 官方的消息,Spring Cloud Alibaba 即将毕业》文章记忆犹新。本周,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--spring-cloud-starter 的格式进行命令。考虑到孵化器的 starter 都是以 spring-cloud-starter-alibaba- 开头,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 信息参考这里。
- issue 615:支持 Spring Cloud Gateway,spring-cloud-alibaba-sentinel-zuul 重命名为 spring-cloud-alibaba-sentinel-gateway。该模块实现了 Sentinel 适配网关(Spring Cloud Gateway, Netflix Zuul)相关的逻辑
- issue 614:支持 WebFlux,spring-cloud-alibaba-starter-sentinel 内部分别适配了 WebServlet 和 WebFlux
- issue 626:Sentinel OpenFeign 场景下解决了接口继承场景下调用父类接口方法出错的 bug
- issue 782:Sentinel OpenFeign 场景下解决了接口中存在 default 方法下调用 default 方法出错的 bug
- issue 741、 issue 615:新增网关和http-method-specify 相关的配置
- issue 716:优化了SlotChainBuilder的加载逻辑,确保非网关场景下 HotParamSlotChainBuilder 生效,网关场景下SlotChainBuilder生效
- issue 707:删除 DataSource 相关的加载日志,改由 Sentinel 自身的 SPI 实现(未来实现)
- issue 265:添加SentinelHealthIndicator 用于查询 Sentinel 的健康状态
4、Nacos Discovery
- nacos-client 版本更新至 1.1.1。Nacos 各版本的 release 信息参考这里。
- issue 765:添加心跳相关的配置参数。包括 心跳的周期、心跳超时时间以及实例删除的超时时间
- issue 669:添加NacosRule 支持权重的 Ribbon 路由规则
- issue 728:支持 ServiceRegistryEndpoint 对当前应用服务状态的操作/查询
- issue 708:支持与 Spring Cloud Config 共同使用
- issue 650:适配 ServerIntrospector,可获取 metadata 以及 secure 信息
- issue 644:NacosWatch 删除内部逻辑,只进行HeartbeatEvent 事件的发送
5、Nacos Config
- nacos-clinet 版本更新至 1.1.1。Nacos 各版本的 release 信息参考这里。
- issue 652:修复NacosConfigEndpoint 线程不安全的 bug
6、RocketMQ Binder
- issue 541:适配MessageSource,consumer 端可以注入 PollableMessageSource 进行消息的拉取
- issue 709:解决不同 jvm 下 instanceName 相同导致 rebalance 失败的 bug
7、Dubbo Spring Cloud
- dubbo 版本更新至 2.7.3。Dubbo 各版本的 release 信息参考这里。
- issue 589:ip 获取策略使用 Spring Cloud 官方的InetUtils 工具获取
- issue 592:Spring Cloud 注册中心配置spring-cloud://localhost 成为可选项,默认直接沿用原生的 Spring Cloud 注册中心
- issue 623:为服务实例的变化新增监听机制
- issue 591:修复某些场景下启动报 NPE 的 bug
- issue 600:不再强依赖 spring-boot-actuator,成为可选依赖
8、Seata
- seata 版本更新至 0.7.1。Seata 各版本的 release 信息参考这里。
- issue 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
1、Spring Boot Admin 是一个开源社区项目,用于管理和监控 SpringBoot 应用程序。但是它没有跟 Spring Cloud 做深度的整合。我们希望做一个 Spring Cloud Admin,它能提供如下功能:
- 增加服务治理控制台,整合微服务控制能力
- 服务查询、管理
- 配置管理
- 限流降级等
- 项目管理/监控
2、参考 Spring Cloud Azure Playground http://azure-spring-cloud.azurewebsites.net/ ,创造 Spring Cloud Alibaba Playground,把一些最佳实践,视频教程,自动生成项目等功能放上去。
3、增加 Spring Cloud Alibaba 最佳实践项目。
4、针对 Spring Cloud Alibaba 各种特性,开发对应的实战 Demo。
5、替换 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 里的包名和版本号不一致,代码层面无需任何修改。
版本的对应关系:
项目地址参考这里。
本文作者:方剑,花名洛夜,GitHub ID @fangjian0423,开源爱好者,阿里巴巴高级开发工程师,阿里云产品 EDAS 开发,Spring Cloud Alibaba 开源项目负责人。
本文为云栖社区原创内容,未经允许不得转载。
Spring 社区的首个国产开源项目顺利毕业的更多相关文章
- Spring 社区的唯一一个国产开源项目 - Spring Cloud Alibaba 毕业了
阿里妹导读:一年多前,Java 界最近发生了一件大事,阿里开源 Spring Cloud Alibaba,并推出首个预览版.Spring Cloud 本身是一套微服务规范,并不是一个拿来即可用的框架, ...
- 【转】10款GitHub上最火爆的国产开源项目
将开源做到极致,提高效率方便更多用户 接触开源时间虽然比较短但是后续会努力为开源社区贡献自己微薄的力量 衡量一个开源产品好不好,看看产品在 GitHub 的 Star 数量就知道了.由此可见,GitH ...
- 点评10款Github上最火爆的国产开源项目
衡量一个开源产品好不好,看看产品在Github的Star数量就知道了.由此可见,Github已经沦落为开源产品的“大众点评”了. 一个开源产品希望快速的被开发者知道.快速的获取反馈,放到Github上 ...
- 10款GitHub上最火爆的国产开源项目
衡量一个开源产品好不好,看看产品在 GitHub 的 Star 数量就知道了.由此可见,GitHub 已经沦落为开源产品的“大众点评”了.一个开源产品希望快速的被开发者知道.快速的获取反馈,放到 Gi ...
- Spring Boot 2.0 版的开源项目云收藏来了!
给大家聊一聊云收藏从 Spring Boot 1.0 升级到 2.0 所踩的坑 先给大家晒一下云收藏的几个数据,作为一个 Spring Boot 的开源项目(https://github.com/cl ...
- 学习Spring Boot看这两个开源项目就够了!非得值得收藏的资源
Spring Boot我就不做介绍了,大家都懂得它是一个多么值得我们程序员兴奋的框架. 为什么要介绍这两个开源项目呢? 1.提供了丰富的学习实践案例 2.整合了非常多优质的学习资源 不多说了,直接上链 ...
- 2015年热门的国产开源软件TOP 50
2015年热门的国产开源软件TOP 50 开源中国在 2015 年得到了快速的发展,单开源软件收藏量就接近 40000 款,其中不乏优质的国产开源项目.本文从软件的收藏.下载.访问等多角度挑选出了 2 ...
- 2016国产开源软件TOP100(Q1)
随着互联网的发展.开放标准的普及和虚拟化技术的应用等诸多IT新领域的创新及拓展,开源技术凭借其开放性.低成本.稳定性.灵活性.安全性和技术创新性等特点迅速走向成熟,逐步发展成为一种主流模式,日益改变着 ...
- 腾讯数据安全专家谈联邦学习开源项目FATE:通往隐私保护理想未来的桥梁
数据孤岛.数据隐私以及数据安全,是目前人工智能和云计算在大规模产业化应用过程中绕不开的“三座大山”. “联邦学习”作为新一代的人工智能算法,能在数据不出本地的情况下,实现共同建模,提升AI模型的效果, ...
随机推荐
- 利用IDEA构建springboot应用--controller例子
微服务 微服务是一个新兴的软件架构,就是把一个大型的单个应用程序和服务拆分为数十个的支持微服务.一个微服务的策略可以让工作变得更为简便,它可扩展单个组件而不是整个的应用程序堆栈,从而满足服务等级协议. ...
- 我能不能理解成 ssh中service就相当于与jsp+servlet+dao中的servlet???
转文 首先解释面上意思,service是业务层,dao是数据访问层.(Data Access Objects) 数据访问对象 1.Dao其实一般没有这个类,这一般是指java中MVC架构中的model ...
- codeforces 1131D-Gourmet choice
传送门:QAQQAQ 题意:有两个数组,一个数组有n个数,另一个数组有m个数.s[i][j]表示第一个数组第i个数和第二个数组第j个数的大小关系,要求构造出一种方案,使条件成立. 先考虑没有等于号的情 ...
- JAVA基础_可变参数
自JAVA1.5以来,在JAVA中出现了可变参数一说,其针对的情况是对多个不确定的相同类型的元素进行同一类操作的情形. 可变参数有点类似与重载的概念,但是其中的可变参数是被隐式的转换成数组来进行处理的 ...
- spring boot 项目添加maven依赖时provided
spring boot 项目是自带tomcat 的,但是我们有时候是需要把项目打包成war 然后放到独立的tomcat中运行的,这个时候我们就需要将它自带的tomcat给排除开,这时候我们就可以使用& ...
- warning LNK4098: 默认库“MSVCRT”与其他库的使用冲突;请使用 /NODEFAULTLIB:library
解决方法:是所有项目的这个"代码生成"属性设置保持一致. 项目——属性——配置属性——C/C++——代码生成:他有/MT,/MTd,/Md,/MDd四个选项,你必须让所有使用的库都 ...
- 理解最短路径-Dijkstra算法
最短路径—Dijkstra算法和Floyd算法 透彻理解迪杰斯特拉算法 Dijkstra算法的使用条件:图中不存在负权边. ---------------------------有待验证------- ...
- Django项目:CMDB(服务器硬件资产自动采集系统)--05--05CMDB采集硬件数据的插件
#__init__.py # ————————05CMDB采集硬件数据的插件———————— from config import settings import importlib # —————— ...
- Django项目:CRM(客户关系管理系统)--71--61PerfectCRM实现CRM学生上传作业
# student_urls.py # ————————60PerfectCRM实现CRM学生上课记录———————— from django.conf.urls import url from bp ...
- 关于CSS3 animation 属性在ie edge浏览器中不能工作
我想要给div边框加一个闪烁,所以我将css中设置如下 给想要闪烁的div加上blink类 这样在firefox,chrome下是正常显示的,但是在ie下box-shadow属性不能被正常的展现 后 ...