前言 nacos的功能回顧
Nacos 致力于幫助您發(fā)現(xiàn)、配置和管理微服務(wù)。Nacos 提供了一組簡(jiǎn)單易用的特性集,幫助您快速實(shí)現(xiàn)動(dòng)態(tài)服務(wù)發(fā)現(xiàn)、服務(wù)配置、服務(wù)元數(shù)據(jù)及流量管理。
Nacos 幫助您更敏捷和容易地構(gòu)建、交付和管理微服務(wù)平臺(tái)。 Nacos 是構(gòu)建以“服務(wù)”為中心的現(xiàn)代應(yīng)用架構(gòu) (例如微服務(wù)范式、云原生范式) 的服務(wù)基礎(chǔ)設(shè)施。
nacos是ali開源的微服務(wù)注冊(cè)中心,其實(shí)也是配置中心,詳細(xì)說明參見:https://nacos.io/zh-cn/docs/what-is-nacos.html。
上一篇中搭建好nacos后,這一篇,學(xué)習(xí)使用nacos來進(jìn)行配置中心的功能學(xué)習(xí)。
一? 在項(xiàng)目使用nacos做為配置中心。
Nacos提供用于存儲(chǔ)配置和其他元數(shù)據(jù)功能,為分布式系統(tǒng)中的外部化配置提供服務(wù)器端和客戶端支持,使用Spring Cloud Alibaba Nacos Config就可以在Nacos Server集中管理Spring Cloud應(yīng)用的外部屬性配置;
Spring Cloud Alibaba Nacos config是在啟動(dòng)的bootstrap階段,將配置加載到Spring環(huán)境中;
Spring Cloud Alibaba Nacos Config使用DataId和GROUP確定一個(gè)配置;
1 # bootstrap.properties 文件的配置信息 2 #測(cè)試 用nacos作為配置中心時(shí)的配置信息 3 spring.application.name= alibabacloud_order_consumer 4 5 # 服務(wù)注冊(cè)與服務(wù)發(fā)現(xiàn) 6 spring.cloud.nacos.discovery.server-addr=192.168.162.2:8848 7 spring.cloud.nacos.discovery.username=nacos 8 spring.cloud.nacos.username=nacos 9 spring.cloud.nacos.password=nacos 10 11 spring.cloud.nacos.config.server-addr=192.168.162.2:8848 12 #千萬要注意,這個(gè)配置節(jié)點(diǎn),nacos config dataId name. 13 spring.cloud.nacos.config.name=nacos 14 spring.cloud.nacos.config.password=nacos 15 16 spring.cloud.nacos.config.file-extension=properties
注意:
spring.cloud.nacos.discovery.username=nacos
spring.cloud.nacos.username=nacos
這兩個(gè)配置其實(shí)指的都是連接nacos使用的用戶名和密碼,在啟動(dòng)nacos的默認(rèn)是這兩個(gè)值??梢酝ㄟ^源代碼跟蹤找到。
?
?
#千萬要注意,這個(gè)配置節(jié)點(diǎn),nacos config dataId name.
spring.cloud.nacos.config.name=nacos
而這個(gè)就要特別注意了,如果配置了這個(gè),這個(gè)表示的是:nacos config dataId,例如,這里寫nacos的話,那么在nacos中的配置,就是這樣的。這是需要特別注意的地方,當(dāng)然也可以通過源碼看到,配置注釋的。實(shí)現(xiàn)中特別容易搞錯(cuò)。
?
?
二? nacos中的配置信息是基于命名空間和group隔離的
啟動(dòng)好Nacos之后,在Nacos添加如下的配置:
Data ID: nacos? 這里如果不寫后綴,那么默認(rèn)為.properties結(jié)尾
Group : DEFAULT_GROUP
配置格式: Properties?
配置內(nèi)容:
user.name=zhangsan?
user.age=18
DataId是以.properties為擴(kuò)展名(默認(rèn)的文件擴(kuò)展名方式就是.properties);
在運(yùn)行時(shí)必須使用 bootstrap.properties配置文件配置nacos server地址,同時(shí),spring.application.name值必須與Nacos中配置的Data Id匹配(除了.properties或者.yaml后綴);
DataId默認(rèn)使用`spring.application.name`配置跟文件擴(kuò)展名結(jié)合(配置格式默認(rèn)使用.properties),GROUP不配置默認(rèn)使用DEFAULT_GROUP;
注意當(dāng)你使用域名的方式來訪問Nacos時(shí),
spring.cloud.nacos.config.server-addr?配置的方式為?域名:port,例如 Nacos的域名為nacos.power.com,監(jiān)聽的端口為80,
則?spring.cloud.nacos.config.server-addr=nacos.xxx.com:80,注意80 端口不能省略;
如果要在項(xiàng)目中使用Nacos來實(shí)現(xiàn)應(yīng)用的外部化配置,需要添加如下依賴:
<dependency>
????<groupId>com.alibaba.cloud</groupId>
????<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
三??Nacos Config配置中心動(dòng)態(tài)刷新原理分析
Nacos Config Starter 默認(rèn)為所有獲取數(shù)據(jù)成功的 Nacos 的配置項(xiàng)添加了監(jiān)聽功能,在監(jiān)聽到服務(wù)端配置發(fā)生變化時(shí)會(huì)實(shí)時(shí)觸發(fā) org.springframework.cloud.context.refresh.ContextRefresher的refresh 方法;
可以通過配置?spring.cloud.nacos.config.refresh.enabled=false?來關(guān)閉動(dòng)態(tài)刷新
?
四? 多環(huán)境支持
a) Nacos Config 除了支持.properties格式以外,也支持yaml格式,這個(gè)時(shí)候只需要完成以下兩步:
1、在應(yīng)用的bootstrap.properties配置文件中顯式地聲明DataId文件擴(kuò)展名;bootstrap.properties文件配置如下:
應(yīng)用配置:spring.cloud.nacos.config.file-extension=yml
2、在Nacos的web管控臺(tái)新增一個(gè)DataId為yaml擴(kuò)展名的配置,如下所示:
Data ID: ??????nacos.yml
Group ?: ??????DEFAULT_GROUP
配置格式:????????YAML或者yml
配置內(nèi)容:? ? ? ? aa.name: yml-name
? ? ? ? ? ? ? ? ? ? ? ?aa.age: 100
?
?
?
?這里需要注意的是:
1. 如果在程序中有指定了讀取的 config dataid,例如:??spring.cloud.nacos.config.name=nacos? ?那么將會(huì)讀取? nacos.yml的配置節(jié)的信息
2. 如果沒有指定讀取的dataid,那么默認(rèn)是讀取的是微服務(wù)名相頭的.yml配置節(jié)的信息,實(shí)現(xiàn)測(cè)試中正是如此。
?
b)?基于profile粒度的多環(huán)境配置
spring-cloud-starter-alibaba-nacos-config 在加載配置的時(shí)候,不僅僅加載了以 dataid 為?${spring.application.name}.${file-extension:properties}?為的基礎(chǔ)配置,還加載了dataid為?
${spring.application.name}-${profile}.${file-extension:properties}?的基礎(chǔ)配置;
在日常開發(fā)中如果遇到多套環(huán)境下的不同配置,可以通過Spring提供的?${spring.profiles.active}?配置項(xiàng)來激活使用某個(gè)配置文件;
spring.profiles.active=develop
${spring.profiles.active}當(dāng)通過配置文件來指定時(shí)必須放在 bootstrap.properties文件中;
比如在Nacos上新增一個(gè)dataid為:nacos-config-dev.yaml的基礎(chǔ)配置,如下所示:
Data ID: ???????nacos-config-deve.yaml
Group ?: ???????DEFAULT_GROUP
配置格式: ???????YAML
配置內(nèi)容: ???????current.env: dev-env
啟動(dòng) Spring Boot 應(yīng)用測(cè)試;
如果需要切換到生產(chǎn)環(huán)境,只需要更改?${spring.profiles.active}?參數(shù)配置即可,如下所示:
spring.profiles.active=product
實(shí)驗(yàn)效果如下:
?
?
?
?五? 遇到的一些問題
1. 如果我們?cè)?bootstrap.properties/yml和application.properties/yml里面都配置了,spring.application.name= alibabacloud-order-consumer ,那么最終注冊(cè)的服務(wù)名以??application.properties/yml 里面的配置為準(zhǔn),決定了讀到nacos中默認(rèn)的dataid也是這個(gè)決定的。
2. 嘗試將??spring.application.name= alibabacloud-order-consumer 配置成有使用中橫杠時(shí),發(fā)現(xiàn)多環(huán)境配置,不受影響,與網(wǎng)上很多說無法讀取的情況不會(huì)出現(xiàn)。可以正常讀取。
?
?
六? 總結(jié)
1. nacos作為配置中心,時(shí),需要在bootstrap.yml中配置讀取的配置信息 如節(jié)點(diǎn),環(huán)境配置,
2. 默認(rèn)讀取的是:dataid 為?${spring.application.name}.${file-extension:properties} 的nacos中配置的信息。
3. 當(dāng)我們指定讀取的命令空間,多環(huán)境時(shí),那么讀取的配置信息為:dataid 為?${spring.application.name}-{profile}.${file-extension:properties} 如果要讀取yml的文件配置信息,則還需要指定一下讀取的配置的擴(kuò)展名為yml,即:
spring.cloud.nacos.config.file-extension=yaml
?
本文摘自 :https://www.cnblogs.com/