摘要:第二步在應用的配置文件中,增加環境配置第三步啟動應用,我們可以看到日志中打印了,加載的配置文件使用實現在中是用來對做集合管理的重要概念。深入思考上面我們分別利用配置管理功能中的幾個不同緯度來實現多環境的配置管理。
前情回顧:
《Spring Cloud Alibaba基礎教程:使用Nacos實現服務注冊與發現》
《Spring Cloud Alibaba基礎教程:支持的幾種服務消費方式》
《Spring Cloud Alibaba基礎教程:使用Nacos作為配置中心》
《Spring Cloud Alibaba基礎教程:Nacos配置的加載規則詳解》
通過之前兩篇對Nacos配置管理功能的介紹,已經學會了在Nacos中如何加入配置以及Spring Cloud應用如何通過配置來加載到對應的內容。接下來,我們討論一個在使用配置中心時,都需要關注的一個問題:多環境的配置如何實現與管理?
多環境管理在Nacos中,本身有多個不同管理級別的概念,包括:Data ID、Group、Namespace。只要利用好這些層級概念的關系,就可以根據自己的需要來實現多環境的管理。
下面,我就來介紹一下,可以使用的幾種實現方式:
使用Data ID與profiles實現Data ID在Nacos中,我們可以理解為就是一個Spring Cloud應用的配置文件名。通過上一篇《Spring Cloud Alibaba基礎教程:Nacos配置的加載規則詳解》,我們知道默認情況下Data ID的名稱格式是這樣的:${spring.application.name}.properties,即:以Spring Cloud應用命名的properties文件。
實際上,Data ID的規則中,還包含了環境邏輯,這一點與Spring Cloud Config的設計類似。我們在應用啟動時,可以通過spring.profiles.active來指定具體的環境名稱,此時客戶端就會把要獲取配置的Data ID組織為:${spring.application.name}-${spring.profiles.active}.properties。
實際上,更原始且最通用的匹配規則,是這樣的:${spring.cloud.nacos.config.prefix}-${spring.profile.active}.${spring.cloud.nacos.config.file-extension}。而上面的結果是因為${spring.cloud.nacos.config.prefix}和${spring.cloud.nacos.config.file-extension}都使用了默認值。
動手試一試
我們可以用《Spring Cloud Alibaba基礎教程:使用Nacos作為配置中心》一文中的列子(可在文末倉庫中獲取)為基礎,體驗一下這種區分環境的配置方式。
第一步:先在Nacos中,根據這個規則,創建兩個不同環境的配置內容。比如:
如上圖,我們為alibaba-nacos-config-client應用,定義了DEV和TEST的兩個獨立的環境配置。我們可以在里面定義不同的內容值,以便后續驗證是否真實加載到了正確的配置。
第二步:在alibaba-nacos-config-client應用的配置文件中,增加環境配置:spring.profiles.active=DEV
第三步:啟動應用,我們可以看到日志中打印了,加載的配置文件:
2019-01-30 15:25:18.216 INFO 96958 --- [ main] o.s.c.a.n.c.NacosPropertySourceBuilder : Loading nacos data, dataId: "alibaba-nacos-config-client-DEV.properties", group: "DEFAULT_GROUP"使用Group實現
Group在Nacos中是用來對Data ID做集合管理的重要概念。所以,如果我們把一個環境的配置視為一個集合,那么也就可以實現不同環境的配置管理。對于Group的用法并沒有固定的規定,所以我們在實際使用的時候,需要根據我們的具體需求,可以是架構運維上對多環境的管理,也可以是業務上對不同模塊的參數管理。為了避免沖突,我們需要在架構設計之初,做好一定的規劃。這里,我們先來說說如何用Group來實現多環境配置管理的具體實現方式。
動手試一試
第一步:先在Nacos中,通過區分Group來創建兩個不同環境的配置內容。比如:
如上圖,我們為alibaba-nacos-config-client應用,定義了DEV環境和TEST環境的兩個獨立的配置,這兩個匹配與上一種方法不同,它們的Data ID是完全相同的,只是GROUP不同。
第二步:在alibaba-nacos-config-client應用的配置文件中,增加Group的指定配置:spring.cloud.nacos.config.group=DEV_GROUP
第三步:啟動應用,我們可以看到日志中打印了,加載的配置文件:
2019-01-30 15:55:23.718 INFO 3216 --- [main] o.s.c.a.n.c.NacosPropertySourceBuilder : Loading nacos data, dataId: "alibaba-nacos-config-client.properties", group: "DEV_GROUP"使用Namespace實現
Namespace在本系列教程中,應該還是第一次出現。先來看看官方的概念說明:用于進行租戶粒度的配置隔離。不同的命名空間下,可以存在相同的Group或Data ID的配置。Namespace的常用場景之一是不同環境的配置的區分隔離,例如:開發測試環境和生產環境的資源(如配置、服務)隔離等。
在官方的介紹中,就介紹了利用其可以作為環境的隔離使用,下面我們就來試一下吧!
動手試一試
第一步:先在Nacos中,根據環境名稱來創建多個Namespace。比如:
第二步:在配置列表的最上方,可以看到除了Public之外,多了幾個剛才創建的Namepsace。分別在DEV和TEST空間下為alibaba-nacos-config-client應用創建配置內容:
第三步:在alibaba-nacos-config-client應用的配置文件中,增加Namespace的指定配置,比如:spring.cloud.nacos.config.namespace=83eed625-d166-4619-b923-93df2088883a。
這里需要注意namespace的配置不是使用名稱,而是使用Namespace的ID。
第四步:啟動應用,通過訪問localhost:8001/test接口,驗證一下返回內容是否正確。這種方式下,目前版本的日志并不會輸出與Namespace相關的信息,所以還無法以此作為加載內容的判斷依據。
深入思考上面我們分別利用Nacos配置管理功能中的幾個不同緯度來實現多環境的配置管理。從結果上而言,不論用哪一種方式,都能夠勝任需求,但是哪一種最好呢?
第一種:通過Data ID與profile實現。
優點:這種方式與Spring Cloud Config的實現非常像,用過Spring Cloud Config的用戶,可以毫無違和感的過渡過來,由于命名規則類似,所以要從Spring Cloud Config中做遷移也非常簡單。
缺點:這種方式在項目與環境多的時候,配置內容就會顯得非常混亂。配置列表中會看到各種不同應用,不同環境的配置交織在一起,非常不利于管理。
建議:項目不多時使用,或者可以結合Group對項目根據業務或者組織架構做一些拆分規劃。
第二種:通過Group實現。
優點:通過Group按環境講各個應用的配置隔離開。可以非常方便的利用Data ID和Group的搜索功能,分別從應用緯度和環境緯度來查看配置。
缺點:由于會占用Group緯度,所以需要對Group的使用做好規劃,畢竟與業務上的一些配置分組起沖突等問題。
建議:這種方式雖然結構上比上一種更好一些,但是依然可能會有一些混亂,主要是在Group的管理上要做好規劃和控制。
第三種:通過Namespace實現。
優點:官方建議的方式,通過Namespace來區分不同的環境,釋放了Group的自由度,這樣可以讓Group的使用專注于做業務層面的分組管理。同時,Nacos控制頁面上對于Namespace也做了分組展示,不需要搜索,就可以隔離開不同的環境配置,非常易用。
缺點:沒有啥缺點,可能就是多引入一個概念,需要用戶去理解吧。
建議:直接用這種方式長遠上來說會比較省心。雖然可能對小團隊而言,項目不多,第一第二方式也夠了,但是萬一后面做大了呢?
注意:不論用哪一種方式實現。對于指定環境的配置(spring.profiles.active=DEV、spring.cloud.nacos.config.group=DEV_GROUP、spring.cloud.nacos.config.namespace=83eed625-d166-4619-b923-93df2088883a),都不要配置在應用的bootstrap.properties中。而是在發布腳本的啟動命令中,用-Dspring.profiles.active=DEV的方式來動態指定,會更加靈活!。參考資料
Nacos官方文檔
代碼示例本文示例讀者可以通過查看下面倉庫的中的alibaba-nacos-config-client項目:
Github:https://github.com/dyc87112/SpringCloud-Learning/
Gitee:https://gitee.com/didispace/SpringCloud-Learning/
如果您對這些感興趣,歡迎star、follow、收藏、轉發給予支持!
以下專題教程也許您會有興趣Spring Boot基礎教程
Spring Cloud基礎教程
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/11977.html
摘要:之前開放過一臺公益給大家,以方便大家在閱讀我博客中教程時候做實驗。由于目前在連載,所以對應的也部署了一臺,并且也開放出來,給大家學習測試之用。 之前開放過一臺公益Eureka Server給大家,以方便大家在閱讀我博客中教程時候做實驗。由于目前在連載Spring Cloud Alibaba,所以對應的也部署了一臺Nacos,并且也開放出來,給大家學習測試之用。 Nacos控制臺 ...
摘要:下表整理了目前的版本與版本的兼容關系還未所以,不論您是在讀我的基礎教程基礎教程還是正在連載的系列教程。 這篇博文是臨時增加出來的內容,主要是由于最近連載《Spring Cloud Alibaba基礎教程》系列的時候,碰到讀者咨詢的大量問題中存在一個比較普遍的問題:版本的選擇。其實這類問題,在之前寫Spring Cloud基礎教程的時候,就已經發過一篇《聊聊Spring Cloud版本的...
摘要:最近對基礎教程系列的催更比較多,說一下最近的近況因為打算一起更新。再次,對于中國用戶來說,還有一個非常特殊的意義它將曾經紅極一時的,以及阿里巴巴的強力消息中間件融入體系。 最近對《Spring Cloud Alibaba基礎教程》系列的催更比較多,說一下最近的近況:因為打算Spring Boot 2.x一起更新。所以一直在改博客Spring Boot專題頁和Git倉庫的組織。由于前端技...
摘要:在搭建集群之前,我們需要先修改的數據持久化配置為存儲。所以,如果啟動多個默認配置下的節點,數據存儲是存在一致性問題的。為了解決這個問題,采用了集中式存儲的方式來支持集群化部署,目前只要支持的存儲。 前情回顧: 《Spring Cloud Alibaba基礎教程:使用Nacos實現服務注冊與發現》 《Spring Cloud Alibaba基礎教程:支持的幾種服務消費方式》 《Spri...
摘要:下面通過這篇,詳細介紹當使用作為配置中心之后,如何實現中修改規則同步到。關于下面改造的原理和分析可以見上一篇中修改規則同步到的頭兩節內容,這里不重復介紹了。但是由于考慮到與的結合使用,略作修改。主要就是中存儲配置的和不要弄錯。 上一篇我們介紹了如何通過改造Sentinel Dashboard來實現修改規則之后自動同步到Apollo。下面通過這篇,詳細介紹當使用Nacos作為配置中心之后...
閱讀 3411·2021-11-24 10:30
閱讀 3283·2021-11-22 15:29
閱讀 3715·2021-10-28 09:32
閱讀 1289·2021-09-07 10:22
閱讀 3346·2019-08-30 15:55
閱讀 3632·2019-08-30 15:54
閱讀 3511·2019-08-30 15:54
閱讀 2843·2019-08-30 15:44