Nacos - 配置管理(4.2)

5.2.3 支持配置的動態(tài)更新

基于上面快速上手的例子,若要實現(xiàn)配置的動態(tài)更新,只需要進行如下改造:

// 注入配置文件上下文
@Autowired
private ConfigurableApplicationContext applicationContext;
@GetMapping(value = "/configs")
public String getConfigs(){
return applicationContext.getEnvironment().getProperty("common.name");
}

我們通過nacos控制臺更新common.name的配置值谤草,再次訪問web端點/configs蒜胖,發(fā)現(xiàn)應用程序能夠獲取到最新的配置值,說明spring-cloud-starter-alibaba-nacos-config 支持配置的動態(tài)更新。
Note 可以通過配置spring.cloud.nacos.config.refresh.enabled=false來關閉動態(tài)刷新

5.2.4 自定義 namespace與group配置

支持自定義 namespace的配置
在沒有明確指定 ${spring.cloud.nacos.config.namespace} 配置的情況下, 默認使用的是 Nacos 上 Public 這個namespace。如果需要使用自定義的命名空間撞芍,可以通過以下配置來實現(xiàn):

spring:
  cloud:
    nacos:
      config:
        namespace: b3404bc0‐d7dc‐4855‐b519‐570ed34b62d7

Note:該配置必須放在 bootstrap.yml文件中。此外 spring.cloud.nacos.config.namespace 的值是 namespace對應的 id跨扮,id 值可以在 Nacos 的控制臺獲取序无。并且在添加配置時注意不要選擇其他的 namespae,否則將會導致讀取不到正確的配置衡创。

支持自定義 Group 的配置
在沒有明確指定 ${spring.cloud.nacos.config.group} 配置的情況下帝嗡, 默認使用的是 DEFAULT_GROUP 。如果需要自定義自己的 Group璃氢,可以通過以下配置來實現(xiàn):

spring:
  cloud:
    nacos:
      config:
        group: DEVELOP_GROUP

Note:該配置必須放在 bootstrap.properties 文件中哟玷。并且在添加配置時 Group 的值一定要和spring.cloud.nacos.config.group 的配置值一致。

5.2.5 自定義擴展的 Data Id 配置

Spring Cloud Alibaba Nacos Config可支持自定義 Data Id 的配置一也。 一個完整的配置案例如下所示:
下邊我們在service2微服務下配置擴展巢寡。

spring:
  application:
    name: service2
  cloud:
    nacos:
      config:
        server‐addr: 127.0.0.1:8848
# config external configuration
# 1、Data Id 在默認的組 DEFAULT_GROUP,不支持配置的動態(tài)刷新
        ext‐config[0]:
          data‐id: ext‐config‐common01.properties
# 2椰苟、Data Id 不在默認的組抑月,不支持動態(tài)刷新
        ext‐config[1]:
          data‐id: ext‐config‐common02.properties
          group: GLOBALE_GROUP
# 3、Data Id 既不在默認的組舆蝴,也支持動態(tài)刷新
        ext‐config[2]:
          data‐id: ext‐config‐common03.properties
          group: REFRESH_GROUP

          refresh: true

可以看到:

  • 通過 spring.cloud.nacos.config.ext-config[n].data-id 的配置方式來支持多個 Data Id 的配置谦絮。
  • 通過 spring.cloud.nacos.config.ext-config[n].group 的配置方式自定義 Data Id 所在的組题诵,不明確配置的話,默認是 DEFAULT_GROUP层皱。
  • 通過 spring.cloud.nacos.config.ext-config[n].refresh 的配置方式來控制該 Data Id 在配置變更時性锭,是否支持應用中可動態(tài)刷新, 感知到最新的配置值叫胖。默認是不支持的草冈。

Note : spring.cloud.nacos.config.ext-config[n].data-id 的值必須帶文件擴展名,文件擴展名既可支持properties瓮增,又可以支持 yaml/yml疲陕。 此時spring.cloud.nacos.config.file-extension 的配置對自定義擴展配置的 Data Id 文件擴展名沒有影響。

通過自定義擴展的 Data Id 配置钉赁,既可以解決多個應用間配置共享的問題,又可以支持一個應用有多個配置文件携茂。

測試:
配置ext-config-common01.properties:


QQ截圖20191230134435.png

配置ext-config-common02.properties


QQ截圖20191230134813.png

配置ext-config-common03.properties
QQ截圖20191230134836.png

編寫測試代碼:
@GetMapping(value = "/configs2")
public String getConfigs2(){
String name = applicationContext.getEnvironment().getProperty("common.name");
String age = applicationContext.getEnvironment().getProperty("common.age");
String address = applicationContext.getEnvironment().getProperty("common.address");
String birthday= applicationContext.getEnvironment().getProperty("common.birthday");
String fullname = applicationContext.getEnvironment().getProperty("common.fullname");
return name+"+"+ age+"+"+address+"+"+ birthday+"+"+ fullname;
}

重啟應用你踩,訪問http://localhost:56011/configs2,觀察配置是否成功獲取讳苦。
輸出:

service2 config+12+beijing+1990‐1‐1+zhangsansanff
5.2.6 自定義共享 Data Id 配置

為了更加清晰的在多個應用間配置共享的 Data Id 带膜,你可以通過以下的方式來配置:

spring:
  cloud:
    nacos:
      config:
        shared‐dataids: ext‐config‐common01.properties,ext‐config‐common02.properties
          refreshable‐dataids: ext‐config‐common01.properties

可以看到:

  • 通過spring.cloud.nacos.config.shared-dataids 來支持多個共享 Data Id 的配置,多個之間用逗號隔開鸳谜。
  • 通過 spring.cloud.nacos.config.refreshable-dataids 來支持哪些共享配置的 Data Id 在配置變化時膝藕,應用中是否可動態(tài)刷新, 感知到最新的配置值咐扭,多個 Data Id 之間用逗號隔開芭挽。如果沒有明確配置,默認情況下所有共享配置的 Data Id 都不支持動態(tài)刷新蝗肪。

Note:通過 spring.cloud.nacos.config.shared-dataids 來支持多個共享配置的 Data Id 時袜爪, 多個共享配置間的一個優(yōu)先級的關系我們約定:按照配置出現(xiàn)的先后順序,即后面的優(yōu)先級要高于前面薛闪。
Note:通過 spring.cloud.nacos.config.shared-dataids 來配置時辛馆,Data Id 必須帶文件擴展名,文件擴展名既可支持 properties豁延,也可以支持 yaml/yml昙篙。 此時 spring.cloud.nacos.config.file-extension 的配置對自定義擴展配置的 Data Id 文件擴展名沒有影響。
Note: spring.cloud.nacos.config.refreshable-dataids 給出哪些需要支持動態(tài)刷新時诱咏,Data Id 的值也必須明確給出文件擴展名苔可。

測試輸出:

service2 config+12+beijing+null+null

為什么后邊兩個值為null?

共享DataId的配置使用默認的group即DEFAULT_GROUP,ext-config-common02.properties不屬于DEFAULT_GROUP袋狞。
共享DataId的配置相比擴展的 Data Id 配置硕蛹,它把group固定為DEFAULT_GROUP醇疼,建議使用擴展的 Data Id 配置,因為擴展的 Data Id 配置也可以實現(xiàn)共享DataId配置法焰。

5.2.7 配置的優(yōu)先級

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

  • A: 通過 spring.cloud.nacos.config.shared-dataids支持多個共享 Data Id 的配置
  • B: 通過 spring.cloud.nacos.config.ext-config[n].data-id 的方式支持多個擴展 Data Id 的配置,多個Data Id 同時配置時埃仪,他的優(yōu)先級關系是spring.cloud.nacos.config.ext-config[n].data-id 其中 n 的值越大乙濒,優(yōu)先級越高。
  • C: 通過內部相關規(guī)則(應用名卵蛉、擴展名 )自動生成相關的 Data Id 配置
    當三種方式共同使用時颁股,他們的一個優(yōu)先級關系是:C > B >A

測試,屏蔽共享dataId傻丝,放開ext-config甘有,如下:

spring:
  application:
    name: service2
  cloud:
    nacos:
      config:
        server‐addr: 127.0.0.1:8848 # 配置中心地址
        file‐extension: yaml
        namespace: c67e4a97‐a698‐4d6d‐9bb1‐cfac5f5b51c4 # 開發(fā)環(huán)境
        group: TEST_GROUP
# shared‐dataids: ext‐config‐common01.properties,ext‐config‐common02.properties
# config external configuration
# 1、Data Id 在默認的組 DEFAULT_GROUP,不支持配置的動態(tài)刷新
        ext‐config[0]:
          data‐id: ext‐config‐common01.properties
# 2葡缰、Data Id 不在默認的組亏掀,不支持動態(tài)刷新
        ext‐config[1]:
          data‐id: ext‐config‐common02.properties
          group: GLOBALE_GROUP
# 3、Data Id 既不在默認的組泛释,也支持動態(tài)刷新
        ext‐config[2]:
          data‐id: ext‐config‐common03.properties
          group: REFRESH_GROUP
          refresh: true

修改ext-config-common03.properties:


QQ截圖20191230140249.png

輸出:

service2 config aaa+15+beijing+1990‐1‐1+zhangsansanff

通過測試發(fā)現(xiàn)多個 Data Id 同時配置時滤愕,他的優(yōu)先級關系是spring.cloud.nacos.config.ext-config[n].data-id其中 n 的值越大,優(yōu)先級越高怜校。

修改:service1.yaml


QQ截圖20191230140358.png

輸出:

service2 config aaa+25+beijing+1990‐1‐1+zhangsansanff

通過測試發(fā)現(xiàn):B和C同時存在间影,C優(yōu)先級高。

5.2.8 完全關閉配置

通過設置 spring.cloud.nacos.config.enabled = false 來完全關閉 Spring Cloud Nacos Config

5.3 Nacos集群部署

5.3.1 集群部署

3個或3個以上Nacos節(jié)點才能構成集群
(1)安裝3個以上Nacos
我們可以復制之前已經解壓好的nacos文件夾茄茁,分別命名為nacos魂贬、nacos1、nacos2
(2)配置集群配置文件
在所有nacos目錄的conf目錄下裙顽,有文件 cluster.conf.example 随橘,將其命名為 cluster.conf ,并將每行配置成ip:port锦庸。(請配置3個或3個以上節(jié)點)

# ip:port
127.0.0.1:8848
127.0.0.1:8849
127.0.0.1:8850

由于是單機演示机蔗,需要更改nacos/的conf目錄下application.properties中server.port,防止端口沖突甘萧。如果服務器有多個ip也要指定具體的ip地址萝嘁,如:nacos.inetutils.ip-address=127.0.0.1
例如:

server.port=8850
nacos.inetutils.ip‐address=127.0.0.1

(3)集群模式啟動
分別執(zhí)行nacos目錄的bin目錄下的startup:

startup ‐m cluster
QQ截圖20191230140709.png

在任意一個nacos的控制臺中,可以看到如下內容:


QQ截圖20191230140735.png
5.3.2 客戶端配置

所有客戶端扬卷,分別指定nacos集群中的若干節(jié)點:

spring:
  application:
    name: xxxx
  cloud:
    nacos:
      config:
        server‐addr: 127.0.0.1:8848,127.0.0.1:8849,127.0.0.1:8850

測試牙言,使用快速上手的例子:
(1)關掉127.0.0.1:8848 nacos Leader實例,發(fā)現(xiàn)Leader被成功選舉至127.0.0.1:8850
(2)緊接著重新啟動Provider怪得,這時馬上請求consumer的/service出現(xiàn)錯誤咱枉,發(fā)現(xiàn)consumer與provider通信已經出現(xiàn)問題卑硫。但經過短暫的時間后,通信恢復蚕断。

通過測試欢伏,我們可以看到,通過以上的集群部署已經達到了高可用的效果亿乳。

5.3.3 生產環(huán)境部署建議

下圖是官方推薦的集群方案硝拧,通過域名 + VIP模式的方式來實現(xiàn)「鸺伲客戶端配置的nacos障陶,當Nacos集群遷移時,客戶端配置無需修改聊训。


QQ截圖20191230141017.png

至于數(shù)據庫抱究,生產環(huán)境下建議至少主備模式。通過修改${nacoshome}/conf/application.properties文件带斑,能夠使nacos擁有多個數(shù)據源鼓寺。

spring.datasource.platform=mysql
db.num=2
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos_config?characterEncoding=utf8&autoReconnect=true
db.url.1=jdbc:mysql://127.0.0.1:3306/nacos_config?characterEncoding=utf8&autoReconnect=true
db.user=root
db.password=root
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市遏暴,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌指黎,老刑警劉巖朋凉,帶你破解...
    沈念sama閱讀 206,214評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異醋安,居然都是意外死亡杂彭,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評論 2 382
  • 文/潘曉璐 我一進店門吓揪,熙熙樓的掌柜王于貴愁眉苦臉地迎上來亲怠,“玉大人,你說我怎么就攤上這事柠辞⊥呕啵” “怎么了?”我有些...
    開封第一講書人閱讀 152,543評論 0 341
  • 文/不壞的土叔 我叫張陵叭首,是天一觀的道長习勤。 經常有香客問我,道長焙格,這世上最難降的妖魔是什么图毕? 我笑而不...
    開封第一講書人閱讀 55,221評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮眷唉,結果婚禮上予颤,老公的妹妹穿的比我還像新娘囤官。我一直安慰自己,他們只是感情好蛤虐,可當我...
    茶點故事閱讀 64,224評論 5 371
  • 文/花漫 我一把揭開白布党饮。 她就那樣靜靜地躺著,像睡著了一般笆焰。 火紅的嫁衣襯著肌膚如雪劫谅。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,007評論 1 284
  • 那天嚷掠,我揣著相機與錄音捏检,去河邊找鬼。 笑死不皆,一個胖子當著我的面吹牛贯城,可吹牛的內容都是我干的。 我是一名探鬼主播霹娄,決...
    沈念sama閱讀 38,313評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼能犯,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了犬耻?” 一聲冷哼從身側響起踩晶,我...
    開封第一講書人閱讀 36,956評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎枕磁,沒想到半個月后渡蜻,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 43,441評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡计济,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 35,925評論 2 323
  • 正文 我和宋清朗相戀三年茸苇,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片沦寂。...
    茶點故事閱讀 38,018評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡学密,死狀恐怖,靈堂內的尸體忽然破棺而出传藏,到底是詐尸還是另有隱情腻暮,我是刑警寧澤,帶...
    沈念sama閱讀 33,685評論 4 322
  • 正文 年R本政府宣布毯侦,位于F島的核電站西壮,受9級特大地震影響,放射性物質發(fā)生泄漏叫惊。R本人自食惡果不足惜款青,卻給世界環(huán)境...
    茶點故事閱讀 39,234評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望霍狰。 院中可真熱鬧抡草,春花似錦饰及、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至腿短,卻和暖如春屏箍,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背橘忱。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評論 1 261
  • 我被黑心中介騙來泰國打工赴魁, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人钝诚。 一個月前我還...
    沈念sama閱讀 45,467評論 2 352
  • 正文 我出身青樓颖御,卻偏偏與公主長得像,于是被迫代替她去往敵國和親凝颇。 傳聞我的和親對象是個殘疾皇子潘拱,可洞房花燭夜當晚...
    茶點故事閱讀 42,762評論 2 345

推薦閱讀更多精彩內容