1. 程式人生 > >Nacos(五):多環境下如何“讀取”Nacos中相應的配置

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_GROUPTEST_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的常用場景之一是不同環境的配置的區分隔離,例如:開發測試環境和生產環境的資源(如配置、服務)隔離等。

建立名稱空間

建立名稱空間DEVTEST,不同的名稱空間會生成相應的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!