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