1. 什麼是Namespace?
Namespace是配置項的集合,類似于一個配置檔案的概念。
2. 什麼是“application”的Namespace?
Apollo在建立項目的時候,都會預設建立一個“application”的Namespace。顧名思義,“application”是給應用自身使用的,熟悉Spring Boot的同學都知道,Spring Boot項目都有一個預設配置檔案application.yml。在這裡application.yml就等同于“application”的Namespace。對于90%的應用來說,“application”的Namespace已經滿足日常配置使用場景了。
用戶端擷取“application” Namespace的代碼如下:
Config config = ConfigService.getAppConfig();
用戶端擷取非“application” Namespace的代碼如下:
Config config = ConfigService.getConfig(namespaceName);
3. Namespace的格式有哪些?
配置檔案有多種格式,例如:properties、xml、yml、yaml、json等。同樣Namespace也具有這些格式。在Portal UI中可以看到“application”的Namespace上有一個“properties”标簽,表明“application”是properties格式的。
注:非properties格式的namespace,在用戶端使用時需要調用 ConfigService.getConfigFile(String namespace, ConfigFileFormat configFileFormat)
來擷取,如果使用Http接口直接調用時,對應的namespace參數需要傳入namespace的名字加上字尾名,如datasources.json。
4. Namespace的擷取權限分類
Namespace的擷取權限分為兩種:
- private (私有的)
- public (公共的)
這裡的擷取權限是相對于Apollo用戶端來說的。
4.1 private權限
private權限的Namespace,隻能被所屬的應用擷取到。一個應用嘗試擷取其它應用private的Namespace,Apollo會報“404”異常。
4.2 public權限
public權限的Namespace,能被任何應用擷取。
5. Namespace的類型
Namespace類型有三種:
- 私有類型
- 公共類型
- 關聯類型(繼承類型)
5.1 私有類型
私有類型的Namespace具有private權限。例如上文提到的“application” Namespace就是私有類型。
5.2 公共類型
5.2.1 含義
公共類型的Namespace具有public權限。公共類型的Namespace相當于遊離于應用之外的配置,且通過Namespace的名稱去辨別公共Namespace,是以公共的Namespace的名稱必須全局唯一。
5.2.2 使用場景
- 部門級别共享的配置
- 小組級别共享的配置
- 幾個項目之間共享的配置
- 中間件用戶端的配置
5.3 關聯類型
5.3.1 含義
關聯類型又可稱為繼承類型,關聯類型具有private權限。關聯類型的Namespace繼承于公共類型的Namespace,用于覆寫公共Namespace的某些配置。例如公共的Namespace有兩個配置項
k1 = v1
k2 = v2
然後應用A有一個關聯類型的Namespace關聯了此公共Namespace,且覆寫了配置項k1,新值為v3。那麼在應用A實際運作時,擷取到的公共Namespace的配置為:
k1 = v3
k2 = v2