手把手教你使用Nacos配置中心
Nacos整合了注冊(cè)中心和配置中心,使用起來(lái)非常方便,這篇文章主要介紹Nacos配置中心的使用。
新建配置
啟動(dòng)Nacos服務(wù)后,進(jìn)入注冊(cè)中心配置頁(yè)面,如下圖:

點(diǎn)擊上圖中紅框里面的加號(hào),進(jìn)入新建配置頁(yè)面,如下圖:

上圖Data ID的完整格式如下:
- ${prefix}-${spring.profiles.active}.${file-extension}
說(shuō)明如下:
- prefix:默認(rèn)是spring.application.name的值,可以通過(guò)配置項(xiàng) spring.cloud.nacos.config.prefix在配置文件中配置。
- spring.profiles.active即為當(dāng)前環(huán)境對(duì)應(yīng)的profile。
當(dāng) spring.profiles.active 為空時(shí),對(duì)應(yīng)的連接符-也將不存在,dataId的拼接格式變成 {file-extension}
file-exetension 為配置內(nèi)容的文件格式,目前只支持properties和yaml類型,可以通過(guò)配置項(xiàng) spring.cloud.nacos.config.file-extension在配置文件中配置。
這里我創(chuàng)建一個(gè)Data ID,內(nèi)容如下圖:

這里使用的spring.profiles.active是dev,bootstrap.properties的配置如下:
- spring.application.name=nacos-producer
- spring.cloud.nacos.config.file-extension=properties
增加下面這個(gè)Controller類進(jìn)行測(cè)試:
- @Controller
- @RequestMapping("config")
- @RefreshScope
- public class ConfigController {
- @Value("${useLocalCache}")
- private boolean useLocalCache;
- @RequestMapping(value = "/get", method = GET)
- @ResponseBody
- public boolean get() {
- return useLocalCache;
- }
- }
在瀏覽器輸入下面的URL后輸出 true,更改之后輸出也會(huì)跟著變化:
- http://localhost:8083/config/get
@RefreshScope這個(gè)注解可以讓應(yīng)用動(dòng)態(tài)刷新配置
多環(huán)境
實(shí)際開(kāi)發(fā)中,我們會(huì)有多套環(huán)境,比如在我本地有dev、test、prod三套環(huán)境,Nacos使用namespace來(lái)進(jìn)行多環(huán)境和多租戶的隔離。Nacos默認(rèn)的namespace是public。
下面是官方對(duì)namespace的描述:
用于進(jìn)行租戶粒度的配置隔離。不同的命名空間下,可以存在相同的 Group 或 Data ID 的配置。Namespace 的常用場(chǎng)景之一是不同環(huán)境的配置的區(qū)分隔離,例如開(kāi)發(fā)測(cè)試環(huán)境和生產(chǎn)環(huán)境的資源(如配置、服務(wù))隔離等。
可以通過(guò)下圖進(jìn)入命名空間頁(yè)面:

添加一個(gè)命名空間,如下圖,命名空間ID可以不填,系統(tǒng)會(huì)自動(dòng)生成:

按照上圖我創(chuàng)建了三個(gè)namespace。這樣在【配置管理】-【配置列表】中添加配置時(shí),就會(huì)出現(xiàn)剛剛配置的namespace,如下圖:

這里我選擇 dev 進(jìn)行添加配置。如下圖,配置一個(gè)testnamespace=dev 的配置:

因?yàn)槭褂昧薾amespace,就必須在配置文件bootstrap.properties中指定我們使用了哪個(gè)namespace,比如在dev環(huán)境的bootstrap.properties文件中增加如下配置:
- spring.cloud.nacos.config.namespace=ad0738cd-b595-4885-a4e5-03f547d11fa0
這時(shí)改一下測(cè)試Controller增加下面配置:
- @Controller
- @RequestMapping("config")
- @RefreshScope
- public class ConfigController {
- @Value("${testnamespace}")
- private String testnamespace;
- @RequestMapping(value = "/getEnv", method = GET)
- @ResponseBody
- public String getEnv() {
- return testnamespace;
- }
- }
瀏覽器輸入下面配置,輸出 dev,可見(jiàn) namespace 配置生效了。
- http://localhost:8083/config/getEnv
業(yè)務(wù)隔離
如果不同的業(yè)務(wù)系統(tǒng)需要進(jìn)行配置隔離,比如服務(wù)A、服務(wù)B都有數(shù)據(jù)庫(kù)、redis、mq等相關(guān)配置,配置名稱是一樣的,怎么進(jìn)行隔離呢?
Nacos提供了group進(jìn)行隔離,我們看一下官方描述:
Nacos 中的一組配置集,是組織配置的維度之一。通過(guò)一個(gè)有意義的字符串(如 Buy 或 Trade )對(duì)配置集進(jìn)行分組,從而區(qū)分 Data ID 相同的配置集。當(dāng)您在 Nacos 上創(chuàng)建一個(gè)配置時(shí),如果未填寫配置分組的名稱,則配置分組的名稱默認(rèn)采用 DEFAULT_GROUP 。配置分組的常見(jiàn)場(chǎng)景:不同的應(yīng)用或組件使用了相同的配置類型,如 database_url 配置和 MQ_topic 配置。
這里,我對(duì)serviceA和serviceB做了數(shù)據(jù)庫(kù)配置,如下圖是serviceB的配置:

配置之后serviceA和serviceB配置列表如下圖:

這時(shí)serviceA和serviceB需要在bootstrap.properties中指定group,如下是serviceA的配置:
- spring.cloud.nacos.config.group=serviceA
這時(shí)在測(cè)試Controller中增加下面代碼:
- @Controller
- @RequestMapping("config")
- @RefreshScope
- public class ConfigController {
- @Value("${spring.datasource.max-idle}")
- private String maxIdle;
- @RequestMapping(value = "/getMaxIdle", method = GET)
- @ResponseBody
- public String getMaxIdle() {
- return maxIdle;
- }
- }
使用下面url測(cè)試后輸入 10:
- http://localhost:8083/config/getMaxIdle
共享配置如果一個(gè)新的應(yīng)用,想要共享其他應(yīng)用的配置,比如上面serviceA可以共享serviceB的配置,是否可以呢?Nacos是支持配置共享的。
我們創(chuàng)建兩個(gè)共享配置 serviceA.properties 和 serviceB.properties,如下圖:

其中,serviceA.properties的配置內(nèi)容如下:
- spring.datasource.max-idle=10
serviceB.properties的配置內(nèi)容如下:
- spring.datasource.min-idle=5
我在當(dāng)前的應(yīng)用中共享這兩個(gè)配置,就需要在bootstrap.properties中增加下面的配置:
- spring.cloud.nacos.config.shared-configs[0].dataId=serviceA.properties
- spring.cloud.nacos.config.shared-configs[0].group=DEFAULT_GROUP
- spring.cloud.nacos.config.shared-configs[0].refresh=true
- spring.cloud.nacos.config.shared-configs[1].dataId=serviceB.properties
- spring.cloud.nacos.config.shared-configs[1].group=DEFAULT_GROUP
- spring.cloud.nacos.config.shared-configs[1].refresh=true
啟動(dòng)應(yīng)用后,在瀏覽器輸入下面url,頁(yè)面響應(yīng) 10:
- http://localhost:8083/config/getMaxIdle
在瀏覽器輸入下面url,頁(yè)面響應(yīng) 5:
- http://localhost:8083/config/getMinIdle
注意:共享配置要加.properties或者.yaml的后綴,否則訪問(wèn)不到。
總結(jié)
今天主要介紹了Nacos中配置中心的使用,包括基于namespace實(shí)現(xiàn)的多環(huán)境和多租戶的配置,基于group實(shí)現(xiàn)的業(yè)務(wù)隔離,以及共享配置??梢钥吹絅acos的配置中心功能還是比較完備的,可以很好地滿足業(yè)務(wù)系統(tǒng)使用。