當前位置:首頁 > IT技術 > 編程語言 > 正文

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

前言 nacos的功能回顧

Nacos 致力于幫助您發(fā)現(xiàn)、配置和管理微服務。Nacos 提供了一組簡單易用的特性集,幫助您快速實現(xiàn)動態(tài)服務發(fā)現(xiàn)、服務配置、服務元數(shù)據(jù)及流量管理。

Nacos 幫助您更敏捷和容易地構建、交付和管理微服務平臺。 Nacos 是構建以“服務”為中心的現(xiàn)代應用架構 (例如微服務范式、云原生范式) 的服務基礎設施。

nacos是ali開源的微服務注冊中心,其實也是配置中心,詳細說明參見:https://nacos.io/zh-cn/docs/what-is-nacos.html。

上一篇中搭建好nacos后,這一篇,學習使用nacos來進行配置中心的功能學習。

一? 在項目使用nacos做為配置中心。

Nacos提供用于存儲配置和其他元數(shù)據(jù)功能,為分布式系統(tǒng)中的外部化配置提供服務器端和客戶端支持,使用Spring Cloud Alibaba Nacos Config就可以在Nacos Server集中管理Spring Cloud應用的外部屬性配置;

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 # 服務注冊與服務發(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結尾

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`配置跟文件擴展名結合(配置格式默認使用.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)應用的外部化配置,需要添加如下依賴:

<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)聽到服務端配置發(fā)生變化時會實時觸發(fā) org.springframework.cloud.context.refresh.ContextRefresher的refresh 方法;

可以通過配置?spring.cloud.nacos.config.refresh.enabled=false?來關閉動態(tài)刷新

?

四? 多環(huán)境支持

a) Nacos Config 除了支持.properties格式以外,也支持yaml格式,這個時候只需要完成以下兩步:

1、在應用的bootstrap.properties配置文件中顯式地聲明DataId文件擴展名;bootstrap.properties文件配置如下:

應用配置: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,那么默認是讀取的是微服務名相頭的.yml配置節(jié)的信息,實現(xiàn)測試中正是如此。

?

b)?基于profile粒度的多環(huán)境配置

spring-cloud-starter-alibaba-nacos-config 在加載配置的時候,不僅僅加載了以 dataid 為?${spring.application.name}.${file-extension:properties}?為的基礎配置還加載了dataid為?

${spring.application.name}-${profile}.${file-extension:properties}?的基礎配置;

在日常開發(fā)中如果遇到多套環(huán)境下的不同配置,可以通過Spring提供的?${spring.profiles.active}?配置項來激活使用某個配置文件;

spring.profiles.active=develop

${spring.profiles.active}當通過配置文件來指定時必須放在 bootstrap.properties文件中

比如在Nacos上新增一個dataid為:nacos-config-dev.yaml的基礎配置,如下所示:

Data ID: ???????nacos-config-deve.yaml

Group ?: ???????DEFAULT_GROUP

配置格式: ???????YAML

配置內(nèi)容: ???????current.env: dev-env

啟動 Spring Boot 應用測試;

如果需要切換到生產(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 ,那么最終注冊的服務名以??application.properties/yml 里面的配置為準,決定了讀到nacos中默認的dataid也是這個決定的。

2. 嘗試將??spring.application.name= alibabacloud-order-consumer 配置成有使用中橫杠時,發(fā)現(xiàn)多環(huán)境配置,不受影響,與網(wǎng)上很多說無法讀取的情況不會出現(xiàn)??梢哉Wx取。

?

?

六? 總結

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/

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