Nacos(五):多環境下如何“讀取”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共同使用,推薦這種方案



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM