當(dāng)前位置:首頁 > IT技術(shù) > 編程語言 > 正文

Spring Cloud Alibaba之nacos 配置中心使用
2021-10-22 16:45:57

前言 nacos的功能回顧

Nacos 致力于幫助您發(fā)現(xiàn)、配置和管理微服務(wù)。Nacos 提供了一組簡單易用的特性集,幫助您快速實(shí)現(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ù)注冊中心,其實(shí)也是配置中心,詳細(xì)說明參見:https://nacos.io/zh-cn/docs/what-is-nacos.html。

上一篇中搭建好nacos后,這一篇,學(xué)習(xí)使用nacos來進(jìn)行配置中心的功能學(xué)習(xí)。

一? 在項(xiàng)目使用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確定一個(gè)配置;

 1 # bootstrap.properties 文件的配置信息
 2 #測試 用nacos作為配置中心時(shí)的配置信息
 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 #千萬要注意,這個(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使用的用戶名和密碼,在啟動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隔離的

啟動好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配置中心動態(tài)刷新原理分析

Nacos Config Starter 默認(rèn)為所有獲取數(shù)據(jù)成功的 Nacos 的配置項(xiàng)添加了監(jiān)聽功能,在監(jiān)聽到服務(wù)端配置發(fā)生變化時(shí)會實(shí)時(shí)觸發(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格式,這個(gè)時(shí)候只需要完成以下兩步:

1、在應(yīng)用的bootstrap.properties配置文件中顯式地聲明DataId文件擴(kuò)展名;bootstrap.properties文件配置如下:

應(yīng)用配置:spring.cloud.nacos.config.file-extension=yml

2、在Nacos的web管控臺新增一個(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? ?那么將會讀取? nacos.yml的配置節(jié)的信息

2. 如果沒有指定讀取的dataid,那么默認(rèn)是讀取的是微服務(wù)名相頭的.yml配置節(jié)的信息,實(shí)現(xiàn)測試中正是如此。

?

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

啟動 Spring Boot 應(yīng)用測試;

如果需要切換到生產(chǎn)環(huán)境,只需要更改?${spring.profiles.active}?參數(shù)配置即可,如下所示:

spring.profiles.active=product

實(shí)驗(yàn)效果如下:

?

?

?

?五? 遇到的一些問題

1. 如果我們在 bootstrap.properties/yml和application.properties/yml里面都配置了,spring.application.name= alibabacloud-order-consumer ,那么最終注冊的服務(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)上很多說無法讀取的情況不會出現(xiàn)??梢哉Wx取。

?

?

六? 總結(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/

開通會員,享受整站包年服務(wù)立即開通 >