Spring Cloud Alibaba 發(fā)布第一個(gè)正式版本,順利完成孵化!
相信大家對上周的 《來自 Spring Cloud 官方的消息,Spring Cloud Alibaba 即將畢業(yè)》 文章記憶猶新。 本周,Spring Cloud Alibaba 正式畢業(yè),并發(fā)布了畢業(yè)后的第一個(gè)版本。 ?
Spring Cloud Alibaba 于 2018年7月27日 在 Spring Cloud 孵化器倉庫提交第一次代碼,到 2019年8月1日 在 Alibaba 倉庫發(fā)布第一個(gè)畢業(yè)版本,時(shí)間將近整整一年。
一年時(shí)間,Spring Cloud Alibaba 完成了從 Spring Cloud 最默默無聞的項(xiàng)目到 Spring Cloud 最火項(xiàng)目的蛻變,并且從孵化器倉庫畢業(yè)了!
Spring Cloud Alibaba 的正式畢業(yè)離不開社區(qū)的幫助,非常感謝 Spring Cloud Alibaba 的 contributor,也非常感謝社區(qū)開源愛好者們創(chuàng)建的 issue,每一個(gè) issue 都是對 Spring Cloud Alibaba 的幫助。
Spring Cloud Alibaba 畢業(yè)過程中的一些小插曲
1、在 5 月底的時(shí)候,Spring Cloud Alibaba Team 跟 Spring Cloud Team 有過一次畢業(yè)的溝通,并且準(zhǔn)備在 Spring Cloud Hoxton 正式發(fā)布的時(shí)候宣布 Spring Cloud Alibaba 畢業(yè)。只不過后來 Spring Cloud 官方調(diào)整了項(xiàng)目策略,需要進(jìn)行倉庫遷移。雙方 team 后續(xù)還因此開了一個(gè)視頻會議,Spring Cloud Alibaba 因此提前畢業(yè)。
2、Spring Cloud Team 希望畢業(yè)后的 starter 命名方式跟 spring boot starter 規(guī)定的格式一致,以 alibaba-
3、在倉庫遷移后的幾天時(shí)間內(nèi),有社區(qū)的開源愛好者專門創(chuàng)建 issue 提問為何離開 spring cloud 倉庫,Spring Cloud Alibaba 被各種質(zhì)疑。后來 Spring Cloud Leader - Spencer Gibb 在 issue 上回復(fù)進(jìn)行了解釋。
4、Spring Cloud Alibaba 本來計(jì)劃是 6 月份發(fā)布畢業(yè)版本,結(jié)果拖到了現(xiàn)在。為了引起不必要的輿論風(fēng)險(xiǎn),我們一直在等待 Spring Cloud Team 官方的公告發(fā)布,期間跟 Spring Cloud Team 溝通了好多個(gè)晚上(有 12 小時(shí)時(shí)差)。
官方文章解讀

官方文章內(nèi)容寫得有點(diǎn)多,我們翻譯一下并做個(gè)簡單的總結(jié):
集成到 Spring Cloud Release Train 帶來的不便:
- 項(xiàng)目的維護(hù)者不能自行發(fā)版,從而無法與項(xiàng)目集成的技術(shù)組件的 roadmap 保持一致,必須等到 Spring Cloud 的下一個(gè) Release Train 才能發(fā)布新的版本更新集成的技術(shù)組件。
- 項(xiàng)目的維護(hù)者沒有辦法看到關(guān)鍵的統(tǒng)計(jì)數(shù)據(jù),如 github 中的關(guān)鍵數(shù)據(jù), 以及在依賴被下載了多少次。
以下的這些合作,其實(shí)與在不在 Spring Cloud Release Train 中沒有關(guān)系:
- Spring Cloud Team 會參與到項(xiàng)目中,進(jìn)行代碼 review 幫助更好地集成到 Spring Cloud 。
- Spring Cloud Alibaba Starter 會加入到 start.spring.io 中,供用戶選擇。
- Spring Team 會將 Spring Cloud Alibaba 項(xiàng)目放在官方介紹頁上https://spring.io/projects/spring-cloud-alibaba ,介紹項(xiàng)目重要的一些發(fā)版和功能特性。
倉庫遷移對于開發(fā)者來說,實(shí)際意味著什么?
- 從 Spring Cloud 的 github 中遷移并不是意味著這些項(xiàng)目的開發(fā)和維護(hù)模式有改變,Spring Cloud Alibaba Team & Spring Cloud Team 仍然維護(hù)著項(xiàng)目。
- 新的模式意味著 groupId 會發(fā)生改變,甚至有些項(xiàng)目的 artifactId 會改變,項(xiàng)目中的 package name 也會發(fā)生變化。需要用戶側(cè)代碼修改。
- 開發(fā)人員需要明確地在開發(fā)中指明依賴的版本,不能通過 Spring Cloud BOM 繼承依賴。
- 作為先行者,Spring Cloud Alibaba 將會首先遵循新的策略,Spring Cloud Alibaba 在畢業(yè)這個(gè)重大的時(shí)機(jī)遷移是一個(gè)合適的時(shí)間。未來大家會看到更多的 組件從 Spring Cloud Release Train 中遷移出去。
本次畢業(yè)版本的 release note
- Greenwich 對應(yīng)的版本支持此 Greenwich.SR2 版本
- Finchley 對應(yīng)的版本支持此 Finchley.SR4 版本
- Sentinel
- sentinel 相關(guān)依賴的版本更新至 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。該模塊實(shí)現(xiàn)了 Sentinel 適配網(wǎng)關(guān)(Spring Cloud Gateway, Netflix Zuul)相關(guān)的邏輯? - #614:支持 WebFlux,
spring-cloud-alibaba-starter-sentinel?內(nèi)部分別適配了 WebServlet 和 WebFlux? - #626:Sentinel OpenFeign 場景下解決了接口繼承場景下調(diào)用父類接口方法出錯(cuò)的 bug
- #782:Sentinel OpenFeign 場景下解決了接口中存在 default 方法下調(diào)用 default 方法出錯(cuò)的 bug
- ?#741 #615:新增網(wǎng)關(guān)和
http-method-specify?相關(guān)的配置 - #716:優(yōu)化了
SlotChainBuilder的加載邏輯,確保非網(wǎng)關(guān)場景下 HotParamSlotChainBuilder 生效,網(wǎng)關(guān)場景下SlotChainBuilder生效? - #707:刪除 DataSource 相關(guān)的加載日志,改由 Sentinel 自身的 SPI 實(shí)現(xiàn)(未來實(shí)現(xiàn))?
- #265:添加
SentinelHealthIndicator?用于查詢 Sentinel 的健康狀態(tài)? - Nacos Discovery
- nacos-client 版本更新至 1.1.1。Nacos 各版本的 release 信息:https://github.com/alibaba/nacos/releases
- #765:添加心跳相關(guān)的配置參數(shù)。包括 心跳的周期、心跳超時(shí)時(shí)間以及實(shí)例刪除的超時(shí)時(shí)間?
- #669:添加
NacosRule?支持權(quán)重的 Ribbon 路由規(guī)則? - #728:支持
ServiceRegistryEndpoint?對當(dāng)前應(yīng)用服務(wù)狀態(tài)的操作/查詢? - ?#708:支持與 Spring Cloud Config 共同使用
- #650:適配
ServerIntrospector,可獲取 metadata 以及 secure 信息? - ?#644:
NacosWatch?刪除內(nèi)部邏輯,只進(jìn)行HeartbeatEvent? 事件的發(fā)送? - Nacos Config
- nacos-clinet 版本更新至 1.1.1。Nacos 各版本的 release 信息: https://github.com/alibaba/nacos/releases
- #652:修復(fù)
NacosConfigEndpoint?線程不安全的 bug? - RocketMQ Binder
- #541:適配
MessageSource,consumer 端可以注入PollableMessageSource?進(jìn)行消息的拉取? - #709:解決不同 jvm 下 instanceName 相同導(dǎo)致 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?成為可選項(xiàng),默認(rèn)直接沿用原生的 Spring Cloud 注冊中心? - #623:為服務(wù)實(shí)例的變化新增監(jiān)聽機(jī)制?
- #591:修復(fù)某些場景下啟動報(bào) NPE 的 bug
- #600:不再強(qiáng)依賴 spring-boot-actuator,成為可選依賴?
- Seata
- seata 版本更新至 0.7.1。Seata 各版本的 release 信息:https://github.com/seata/seata/releases
- #686:修復(fù)負(fù)載均衡的 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 是一個(gè)開源社區(qū)項(xiàng)目,用于管理和監(jiān)控 SpringBoot 應(yīng)用程序。但是它沒有跟 Spring Cloud 做深度的整合。我們希望做一個(gè) Spring Cloud Admin,它能提供如下功能:
- 增加服務(wù)治理控制臺,整合微服務(wù)控制能力
- 服務(wù)查詢、管理
- 配置管理
- 限流降級等
- 項(xiàng)目管理/監(jiān)控
- 參考 Spring Cloud Azure Playground http://azure-spring-cloud.azurewebsites.net/ ,創(chuàng)造 Spring Cloud Alibaba Playground,把一些最佳實(shí)踐,視頻教程,自動生成項(xiàng)目等功能放上去。
- 增加 Spring Cloud Alibaba 最佳實(shí)踐項(xiàng)目。
- 針對 Spring Cloud Alibaba 各種特性,開發(fā)對應(yīng)的實(shí)戰(zhàn) Demo。
- 替換 Spring Cloud 服務(wù)調(diào)用客戶端 OpenFeign & Ribbon。開發(fā)更通用的服務(wù)調(diào)用客戶端,替換 Spring Cloud 服務(wù)調(diào)用客戶端 OpenFeign & Ribbon。
Committer 機(jī)制
項(xiàng)目遷移到 Alibaba 自身的 GitHub 倉庫后,不像在 spring-cloud-incubator 倉庫中那樣沒有權(quán)限發(fā)展 committer。我們現(xiàn)在有權(quán)限發(fā)展 contributor 成為 committer。任何人只要在 Spring Cloud Alibaba 項(xiàng)目上提交了 Pull Request 并且被 merge,就可以成為 contributor;contributor 晉升為為 committer,需要這些條件:
1、至少提交 5 個(gè)有分量的 Pull Request
2、參與 issue 列表的維護(hù)及重要 feature 的討論
3、參與 code review
希望有越來越多的開源愛好者能夠成為 Spring Cloud Alibaba 的 contributor 或 committer,讓我們共同完善 Spring Cloud 生態(tài)。
畢業(yè)后用戶側(cè)代碼修改
倉庫遷移必定涉及到代碼修改。我們總結(jié)修改點(diǎn)有 3 點(diǎn):
1、包名 package name
2、版本號 version number
3、如果用到了 Spring Cloud Alibaba 內(nèi)部類,需要 reimport 這些類(少部分情況才需要改,大部分情況這些類都被 AutoConfiguration 屏蔽了)
以使用 Spring Cloud Alibaba Bom 和 Spring Cloud Nacos Discovery 為例,了解修改點(diǎn)到底有哪些:
孵化器對應(yīng)的 bom 和 starter 版本依賴:
org.springframework.cloud spring-cloud-alibaba-dependencies 0.9.0.RELEASE pom import org.springframework.cloud spring-cloud-starter-alibaba-nacos-discovery
畢業(yè)對應(yīng)的版本依賴:
com.alibaba.cloud spring-cloud-alibaba-dependencies 2.1.0.RELEASE pom import com.alibaba.cloud spring-cloud-starter-alibaba-nacos-discovery
我們在 GitHub 上提供了一個(gè)項(xiàng)目?
https://github.com/spring-cloud-alibaba-group/spring-cloud-alibaba-graduation-modification
用于對比畢業(yè)版本跟孵化器版本開發(fā)項(xiàng)目的區(qū)別。該項(xiàng)目使用了 Nacos Config & Nacos Discovery & Sentinel 功能,master 分支是畢業(yè)版本,incubator 分支是孵化器版本。這是使用 diff 命令比較兩個(gè)分支代碼的不同點(diǎn):
結(jié)論: 我們發(fā)現(xiàn)只有 pom 里的包名和版本號不一致,代碼層面無需任何修改。
版本的對應(yīng)關(guān)系:

項(xiàng)目地址:
https://github.com/alibaba/spring-cloud-alibaba
本文作者:
方劍,花名洛夜,GitHub ID @fangjian0423,開源愛好者,阿里巴巴高級開發(fā)工程師,阿里云產(chǎn)品 EDAS 開發(fā),Spring Cloud Alibaba 開源項(xiàng)目負(fù)責(zé)人。
