相信你們對上週的 《來自 Spring Cloud 官方的消息,Spring Cloud Alibaba 即將畢業》文章記憶猶新。本週,Spring Cloud Alibaba 正式畢業,併發布了畢業後的第一個版本。git
Spring Cloud Alibaba 於 2018年7月27日 在 Spring Cloud 孵化器倉庫提交第一次代碼,到 2019年8月1日 在 Alibaba 倉庫發佈第一個畢業版本,時間將近整整一年。github
一年時間,Spring Cloud Alibaba 完成了從 Spring Cloud 最默默無聞的項目到 Spring Cloud 最火項目的蛻變,而且從孵化器倉庫畢業了!web
Spring Cloud Alibaba 的正式畢業離不開社區的幫助,很是感謝 Spring Cloud Alibaba 的 contributor,也很是感謝社區開源愛好者們建立的 issue,每個 issue 都是對 Spring Cloud Alibaba 的幫助。spring
Spring Cloud Alibaba 畢業過程當中的一些小插曲
一、在 5 月底的時候,Spring Cloud Alibaba Team 跟 Spring Cloud Team 有過一次畢業的溝通,而且準備在 Spring Cloud Hoxton 正式發佈的時候宣佈 Spring Cloud Alibaba 畢業。只不事後來 Spring Cloud 官方調整了項目策略,須要進行倉庫遷移。雙方 team 後續還所以開了一個視頻會議,Spring Cloud Alibaba 所以提早畢業。安全
二、Spring Cloud Team 但願畢業後的 starter 命名方式跟 spring boot starter 規定的格式一致,以 alibaba--spring-cloud-starter 的格式進行命令。考慮到孵化器的 starter 都是以 spring-cloud-starter-alibaba- 開頭,Spring Cloud Alibaba 並不想破壞原有的規則。最終雙方討論了好屢次才決定沿用老的 starter 命名方式。併發
三、在倉庫遷移後的幾天時間內,有社區的開源愛好者專門建立 issue 提問爲什麼離開 spring cloud 倉庫,Spring Cloud Alibaba 被各類質疑。後來 Spring Cloud Leader - Spencer Gibb 在 issue 上回復進行了解釋。負載均衡
四、Spring Cloud Alibaba 原本計劃是 6 月份發佈畢業版本,結果拖到了如今。爲了引發沒必要要的輿論風險,咱們一直在等待 Spring Cloud Team 官方的公告發布,期間跟 Spring Cloud Team 溝通了好多個晚上(有 12 小時時差)。jvm
官方文章解讀
spring-boot
官方文章內容寫得有點多,咱們翻譯一下並作個簡單的總結:微服務
集成到 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/sp...,介紹項目重要的一些發版和功能特性。
倉庫遷移對於開發者來講,實際意味着什麼?
從 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
一、Greenwich 對應的版本支持此 Greenwich.SR2 版本
二、Finchley 對應的版本支持此 Finchley.SR4 版本
三、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 74一、 issue 615:新增網關和http-method-specify 相關的配置
issue 716:優化了SlotChainBuilder的加載邏輯,確保非網關場景下 HotParamSlotChainBuilder 生效,網關場景下SlotChainBuilder生效
issue 707:刪除 DataSource 相關的加載日誌,改由 Sentinel 自身的 SPI 實現(將來實現)
issue 265:添加SentinelHealthIndicator 用於查詢 Sentinel 的健康狀態
四、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 事件的發送
五、Nacos Config
nacos-clinet 版本更新至 1.1.1。Nacos 各版本的 release 信息參考這裏。
issue 652:修復NacosConfigEndpoint 線程不安全的 bug
六、RocketMQ Binder
issue 541:適配MessageSource,consumer 端能夠注入 PollableMessageSource 進行消息的拉取
issue 709:解決不一樣 jvm 下 instanceName 相同致使 rebalance 失敗的 bug
七、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,成爲可選依賴
八、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
一、Spring Boot Admin 是一個開源社區項目,用於管理和監控 SpringBoot 應用程序。可是它沒有跟 Spring Cloud 作深度的整合。咱們但願作一個 Spring Cloud Admin,它能提供以下功能:
增長服務治理控制檯,整合微服務控制能力
服務查詢、管理
配置管理
限流降級等
項目管理/監控
二、參考 Spring Cloud Azure Playground http://azure-spring-cloud.azu... ,創造 Spring Cloud Alibaba Playground,把一些最佳實踐,視頻教程,自動生成項目等功能放上去。
三、增長 Spring Cloud Alibaba 最佳實踐項目。
四、針對 Spring Cloud Alibaba 各類特性,開發對應的實戰 Demo。
五、替換 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,須要這些條件:
一、至少提交 5 個有份量的 Pull Request
二、參與 issue 列表的維護及重要 feature 的討論
三、參與 code review
但願有愈來愈多的開源愛好者可以成爲 Spring Cloud Alibaba 的 contributor 或 committer,讓咱們共同完善 Spring Cloud 生態。
畢業後用戶側代碼修改
倉庫遷移一定涉及到代碼修改。咱們總結修改點有 3 點:
一、包名 package name
二、版本號 version number
三、若是用到了 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 開源項目負責人。