Spring 社區的首個國產開源項目順利畢業了


Spring 社區的首個國產開源項目順利畢業了

2021-01-08 開源中國

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 帶來的不便:

以下的這些合作,其實與在不在 Spring Cloud Release Train 中沒有關係:

倉庫遷移對於開發者來說,實際意味著什麼?

從 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 相關依賴的版本更新至 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發現

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

路線圖

Spring Boot Admin 是一個開源社區項目,用於管理和監控 SpringBoot 應用程式。但是它沒有跟 Spring Cloud 做深度的整合。我們希望做一個 Spring Cloud Admin,它能提供如下功能:

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 版本依賴:

org.springframework.cloud 春季雲阿里巴巴依賴性 0.9.0發布 絨球 進口 org.springframework.cloud Spring Cloud Starter阿里巴巴Nacos發現

畢業對應的版本依賴:

com.alibaba.cloud 春季雲阿里巴巴依賴性 2.1.0。發布 絨球 進口 com.alibaba.cloud Spring Cloud Starter阿里巴巴Nacos發現

我們在 GitHub 上提供了一個項目 ,點擊這裡,了解更多,用於對比畢業版本跟孵化器版本開發項目的區別。該項目使用了 Nacos Config & Nacos Discovery & Sentinel 功能,master 分支是畢業版本,incubator 分支是孵化器版本。這是使用 diff 命令比較兩個分支代碼的不同點:

結論: 我們發現只有 pom 里的包名和版本號不一致,代碼層面無需任何修改。

版本的對應關係:

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

本文作者:方劍,花名洛夜,GitHub ID @fangjian0423,開源愛好者,阿里巴巴高級開發工程師,阿里雲產品 EDAS 開發,Spring Cloud Alibaba 開源項目負責人。