Nacos(五):多環境下如何“讀取”Nacos中相應的配置
前言
前景回顧:
- Nacos(四):SpringCloud專案中接入Nacos作為配置中心
- Nacos(三):Nacos與OpenFeign的對接使用
- Nacos(二):SpringCloud專案中接入Nacos作為註冊中心
通過前面幾篇介紹,已經基本瞭解了Nacos做為註冊中心和配置中心的基本用法。
在實際開發中,通常一個系統會準備開發環境、測試環境、預發環境、正式環境
那麼如何保證指定環境啟動時服務能正確讀取到Nacos上相應環境的配置檔案呢
本文主要對Nacos作為配置中心時,如何對多環境配置檔案進行讀取進行論述。
我的環境
- Windows10
- JDK8
- SpringCloud:Finchley.RELEASE
- SpringBoot:2.0.4.RELEASE
- spring-cloud-alibaba-dependencies:0.2.2.RELEASE
- Nacos-server:1.0.1
本文的專案Demo繼續沿用 Nacos(四)中的工程nacos-config
,若小夥伴還沒有之前的環境,可至原始碼地址中下載
Data ID方案
在上一篇文章中有對Data ID
進行過介紹,它的命名規則為:${prefix}-${spring.profile.active}.${file-extension}
通過其中的spring.profile.active
屬性即可進行多環境下配置檔案的讀取
一起來試一下吧~
新建配置
1、啟動Nacos-Server後,建立配置檔案Data ID為:nacos-config-dev.yml
, 其配置如下:
server:
port: 9980
nacos:
config: 這裡是dev環境
2、繼續建立配置檔案Data ID為:nacos-config-test.yml
, 其配置如下:
server:
port: 9981
nacos:
config: 這裡是test環境
多環境測試
通過Idea啟動nacos-config
專案,並指定spring.profiles.active
,通過不同的環境進行啟動
通過上面的配置,將專案分為dev、test兩個環境啟動後,進行測試
訪問 http://127.0.0.1:9980/getValue 返回:這裡是dev環境
訪問 http://127.0.0.1:9981/getValue 返回:這裡是test環境
可以看到,分別以dev、test啟動後相應的讀取到不同的配置,dev環境讀取到啟動埠為9980,test讀取到啟動埠9981
Group方案
上面介紹了通過指定spring.profile.active
和配置檔案的DataID
來使不同環境下讀取不同的配置
這裡也可以不用DataID
,直接通過Group
實現環境區分
注:這種方式不太推薦,切換不靈活,需要切換環境時要改Gruop配置
新建配置
1、建立配置檔案Data ID為:nacos-config.yml
, Group為:DEV_GROUP
, 其配置如下:
server:
port: 9980
nacos:
config: 這裡是dev環境
2、繼續建立配置檔案Data ID為:nacos-config.yml
, Group為:TEST_GROUP
, 其配置如下:
server:
port: 9981
nacos:
config: 這裡是test環境
這裡的兩個配置檔案他們的DataID相同但是Group不同
修改專案中的配置檔案bootstrap.yml
在config下增加一條group的配置,指定配置檔案所在的group,可配置為DEV_GROUP
或TEST_GROUP
spring:
application:
name: nacos-config
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
config:
server-addr: 127.0.0.1:8848
prefix: ${spring.application.name}
file-extension: yml
group: DEV_GROUP
啟動測試
將group配置為DEV_GROUP
啟動進行測試
訪問 http://127.0.0.1:9980/getValue 返回:這裡是dev環境
將group配置為TEST_GROUP
啟動進行測試
訪問 http://127.0.0.1:9981/getValue 返回:這裡是test環境
通過指定group的方式啟動,DEV_GROUP讀取到啟動埠為9980,TEST_GROUP讀取到啟動埠9981
說明
只通過Group來進行多環境的區分的方式我不推薦使用,因為涉及到了多環境自然就會改變spring.profile.active
,而profile一旦生效,配置檔案就會依據DataID的規則進行查詢。所以Group的方式僅作參考。
Group的合理用法應該是配合namespace進行服務列表和配置列表的隔離和管理
Namespace方案
Namespace名稱空間進行環境隔離也是官方推薦的一種方式。Namespace的常用場景之一是不同環境的配置的區分隔離,例如:開發測試環境和生產環境的資源(如配置、服務)隔離等。
建立名稱空間
建立名稱空間DEV
和TEST
,不同的名稱空間會生成相應的UUID,如下圖
新建配置檔案
1、在名稱空間DEV下建立DataID為:nacos-config.yml
,Group為預設值的配置,配置如下:
server:
port: 9980
nacos:
config: 這裡是DEV名稱空間
2、在名稱空間TEST下建立DataID為:nacos-config.yml
,Group為預設值的配置,配置如下:
server:
port: 9981
nacos:
config: 這裡是TEST名稱空間
修改專案中的配置檔案bootstrap.yml
在config下增加一條namespace的配置,指定當前配置所在的名稱空間ID。注意是名稱空間ID!!!!配置如下
spring:
application:
name: nacos-config
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
config:
server-addr: 127.0.0.1:8848
prefix: ${spring.application.name}
file-extension: yml
namespace: edbd013b-b178-44f7-8caa-e73071e49c4d
啟動測試
將namespace配置為DEV
的ID:edbd013b-b178-44f7-8caa-e73071e49c4d
,啟動進行測試
訪問 http://127.0.0.1:9980/getValue 返回:這裡是DEV名稱空間
將namespace配置為TEST
的ID:0133bd1e-25c3-4985-96ed-a4e34efdea2e
,啟動進行測試
訪問 http://127.0.0.1:9981/getValue 返回:這裡是TEST名稱空間
通過指定namespace的方式啟動,均可讀取到對應的啟動埠和相關配置
說明
Namespace是官方推薦的環境隔離方案,確實有他的獨到之處,使用namespace這種方案,同時可以與DataID+profile的方式結合
同時釋放Group的限制,大大提高多環境配置管理的靈活性。
總結
通過上面三種方案的介紹,想必大家對於多環境下的配置讀取方式應該有所選擇
- DataID: 適用於專案不多,服務量少的情況。
- Group:實現方式簡單,但是容易與DataID方案發生衝突,僅適合於本地除錯
- Namespace:實現方式簡單,配置管理簡單靈活,同時可以結合DataID共同使用,推薦這種方案
參考感謝
Nacos如何支援多環境
Nacos配置的多環境管理
- 文章作者: LarsCheng
- 文章連結: 本文首發於個人部落格:https://www.larscheng.com/nacos-namespace/
- 釋出方式:OpenWrite 最懂你的科技自媒體管理平臺
- 版權宣告: 本部落格所有文章除特別宣告外,均採用 CC BY-NC-SA 4.0 許可協議。轉載請註明來自 LarsCheng's Blog!