Nacos配置中心規範

lbjfish發表於2020-10-20

版本選擇

畢業版本依賴關係(推薦使用)

image.png

Namespace

Nacos引入了名稱空間(Namespace)的概念來進行多環境配置和服務的管理及隔離
Namespace也是官方推薦的多環境支援方案。

如何進行配置和服務的管理、隔離(Group)

這裡的group就是Namespace的概念,將服務和配置納入相同的Namespace進行管理
不同Namespace下的服務和配置之間就隔離開來。

建立和獲取NamespaceID

NamespaceId值是在配置檔案配置時必須要填入的配置項,所以需要我們先建立Namespace和Id,步驟如下:
nacos 的控制檯左邊功能欄看到有一個名稱空間的功能,點選就可以看到新建名稱空間 的按鈕。
新建成功後,可以在名稱空間列表中檢視到你所建立的Namespace和他生成的ID值。

以下展示了名稱空間的建立

Namespace實施方案

  1. 面向一個租戶

從一個租戶(使用者)的角度來看,如果有多套不同的環境,那麼這個時候可以根據指定的環境來建立不同的 namespce,以此來實現多環境的隔離。
例如,你可能有dev,test和prod三個不同的環境,那麼使用一套 nacos 叢集可以分別建以下三個不同的 namespace。如下圖所示:

方案1

通過定義不同的環境,不同環境的專案在不同的Namespace下進行管理,不同環境之間通過Namespace進行隔離。
當多個專案同時使用該Nacos叢集時,還可以通過Group進行Namespace內的細化分組。
這裡以Namespace:dev為例,在Namespace中通過不同Group進行同一環境中不同專案的再分類。

方案2內部Group分組

程式碼示例

Namespace下新建配置檔案

這裡假設有 nacos-namespace-onenacos-namespace-two 兩個專案
啟動Nacos-Server,進入Nacos控制檯,切換到Namespace:dev介面,新建配置檔案

  • DataId:nacos-namespace-one-dev.yml
  • Group:namespace-one
  • 配置格式:YAML
  • 配置內容:
nacos: 
     config: 專案:nacos-namespace-one,Namespace:dev
  • 繼續新建配置檔案
  • DataId:nacos-namespace-two-dev.yml
  • Group:namespace-two
  • 配置格式:YAML
  • 配置內容:
nacos: 
    config: 專案:nacos-namespace-two,Namespace:dev

注意檢查DataId是否正確、group、配置內容與環境是否匹配

以下NamespaceId均來自建立Namespace時生成的Id,在控制檯名稱空間頁面中可以檢視

建立dev環境配置檔案 bootstrap.yml

server:
  port: 9911
spring:
  application:
    name: nacos-namespace-one
  profiles:
    active: dev
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
        namespace: edbd013b-b178-44f7-8caa-e73071e49c4d
        group: namespace-one
      config:
        server-addr: 127.0.0.1:8848
        prefix: ${spring.application.name}
        file-extension: yml
        namespace: edbd013b-b178-44f7-8caa-e73071e49c4d
        group: namespace-one

建立test環境配置檔案 bootstrap.yml

server:
  port: 9912
spring:
  application:
    name: nacos-namespace-one
  profiles:
    active: test
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
        namespace: 0133bd1e-25c3-4985-96ed-a4e34efdea2e
        group: namespace-one
      config:
        server-addr: 127.0.0.1:8848
        prefix: ${spring.application.name}
        file-extension: yml
        namespace: 0133bd1e-25c3-4985-96ed-a4e34efdea2e
        group: namespace-one

** nacos-namespace-two** 專案重複以上步驟

image

嘗試訪問介面來獲取配置資訊,驗證是否可以讀取相應環境配置

訪問127.0.0.1:9911/getValue,返回:專案:nacos-namespace-one,Namespace:dev
訪問127.0.0.1:9912/getValue,返回:專案:nacos-namespace-one,Namespace:test
訪問127.0.0.1:9921/getValue,返回:專案:nacos-namespace-two,Namespace:dev
訪問127.0.0.1:9922/getValue,返回:專案:nacos-namespace-two,Namespace:test

總結:通過Namespace來隔離不同的環境(dev\test),在具體的環境Namespace中通過Group來管理不同的專案

共享配置

    extension-configs:
      - data-id: shareconfig3.yml
        group: share3_group
        refresh: true
      - data-id: shareconfig3.yml
        group: share4_group
        refresh: true
    shared-configs:
      - data-id: shareconfig1.yml
        refresh: true
      - data-id: shareconfig2.yml
        refresh: true

介紹

從圖上可以看出 :
spring.cloud.nacos.config.extension-configs[n].data-id 其中 n 的值越大,優先順序越高,因此會走group=share4_group的配置。
spring.cloud.nacos.config.shared-configs[n].data-id預設跟上面一樣的邏輯。

不同方式配置載入優先順序

Spring Cloud Alibaba Nacos Config 目前提供了三種配置能力從 Nacos 拉取相關的配置。

A: 通過 spring.cloud.nacos.config.shared-configs[n].data-id 支援多個共享 Data Id 的配置
B: 通過 spring.cloud.nacos.config.extension-configs[n].data-id 的方式支援多個擴充套件 Data Id 的配置
C: 通過內部相關規則(spring.cloud.nacos.config.prefix、spring.cloud.nacos.config.file-extension、spring.cloud.nacos.config.group)自動生成相關的 Data Id 配置

當三種方式共同使用時,他們的一個優先順序關係是:A < B < C

相關文章