您好,登錄后才能下訂單哦!
本篇內(nèi)容主要講解“Nacos配置中心實(shí)際操作”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“Nacos配置中心實(shí)際操作”吧!
一個(gè)更易于構(gòu)建云原生應(yīng)用的動態(tài)服務(wù)發(fā)現(xiàn)、配置管理和服務(wù)管理平臺。
通俗解釋就是:Nacos是一個(gè)注冊中心&配置中心
關(guān)于Nacos注冊中心的功能,在Nacos注冊中心實(shí)戰(zhàn)篇中,阿鑒已經(jīng)給大家詳細(xì)介紹了,今天我們就來看看配置中心如何使用吧~
在介紹Nacos注冊中心實(shí)戰(zhàn)時(shí),阿鑒已經(jīng)介紹并搭建好了Nacos集群,這里就直接使用當(dāng)時(shí)的Nacos集群了。
引入依賴
在my-goods
項(xiàng)目引入config
依賴
<dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> </dependency>
編輯配置
spring: application: name: my-goods cloud: nacos: config: server-addr: 192.168.2.11:8850 username: nacos password: nacos
在nacos新建配置文件并編寫配置
由于我們的配置中并未指定命名空間,所以默認(rèn)使用
public
命名空間
Data ID: 在什么都沒有配置的情況下,Data ID為「服務(wù)名」或者「服務(wù)名.文件擴(kuò)展名」,也就是
my-goods
或者my-goods.properties
(我們也沒有配置文件擴(kuò)展名,默認(rèn)為properties
)Group: 默認(rèn)為
DEFAULT_GROUP
配置格式:即為文件格式,默認(rèn)為
properties
配置內(nèi)容:文件格式是
properties
, 配置內(nèi)容即為properties
格式寫法
編寫代碼
@RestController @RequestMapping("/goods") public class GoodsController { @Value("${goods}") public String goods; @GetMapping("/config") public String config(){ return "this goods is " + goods; } }
啟動服務(wù)測試
此時(shí)已經(jīng)讀取到遠(yuǎn)程的配置
Nacos作為配置中心,將配置放在遠(yuǎn)端管理只是基礎(chǔ)能力,更重要的是還提供了方便快捷的動態(tài)刷新配置功能。
修改代碼
要想使得配置具有自動刷新的能力,只需要在對應(yīng)的類加上@RefreshScope
注解即可
@RefreshScope @RestController @RequestMapping("/goods") public class GoodsController { @Value("${goods}") public String goods; @GetMapping("/config") public String config(){ return "this goods is " + goods; } }
修改Nacos上的配置
修改配置:apple -> banana
發(fā)布完之后可以看到控制臺中出現(xiàn)監(jiān)聽到配置變更的輸出
2021-05-09 22:45:13.103 INFO 5930 --- [168.1.11_8850] c.a.n.client.config.impl.ClientWorker : [fixed-114.116.212.76_8850] [polling-resp] config changed. dataId=my-goods, group=DEFAULT_GROUP 2021-05-09 22:45:13.104 INFO 5930 --- [168.1.11_8850] c.a.n.client.config.impl.ClientWorker : get changedGroupKeys:[my-goods+DEFAULT_GROUP]
再次調(diào)用接口
可以看到配置已經(jīng)發(fā)生了變更
一般來說,在我們開發(fā)項(xiàng)目時(shí),都會區(qū)分環(huán)境,比如開發(fā)環(huán)境、測試環(huán)境、生產(chǎn)環(huán)境,每個(gè)環(huán)境配置都會有些許不同,比如mysql配置。那我們就會在配置文件中增加以下配置:
spring: profiles: active: dev
此時(shí)Nacos將增加新的Data ID: 服務(wù)名-環(huán)境名.文件擴(kuò)展名
即為 my-goods-dev.properties
修改代碼
@RefreshScope @RestController @RequestMapping("/goods") public class GoodsController { @Value("${goods}") public String goods; @Value("${price}") public String price; @GetMapping("/config") public String config(){ return "this goods is " + goods + ", and price is " + price; } }
新增配置
增加一個(gè)新的data id 為my-goods-dev.properties
配置
重啟項(xiàng)目測試
如果在my-goods-dev.properties
配置中增加goods=lemon
的配置,那么此時(shí)my-goods
的和my-goods-dev.properties
的goods
配置哪個(gè)會生效呢?
在my-goods-dev.properties
中增加goods=lemon
的配置
直接測試,此時(shí)無須重啟項(xiàng)目
從測試結(jié)果看出,Nacos的優(yōu)先級和Spring的優(yōu)先級相同,帶環(huán)境名的配置優(yōu)先
雖然本篇一直只用my-goods
這一個(gè)服務(wù)做案例,但是大家不要忘了,我們這其實(shí)是一個(gè)微服務(wù)系統(tǒng),在一個(gè)微服務(wù)系統(tǒng)里,總有些配置是會被許多服務(wù)共同使用的,比如Redis的配置。
如果每個(gè)服務(wù)都在自己的配置里單獨(dú)維護(hù)同樣的Redis配置,當(dāng)Redis配置發(fā)生變更時(shí),那么每個(gè)服務(wù)都要改一次,想想其實(shí)也是挺惡心的。
為了解決這個(gè)問題,Nacos同樣貼心的給我們提供了另一種配置方式:共享配置
編輯配置文件
增加shared-configs
,并將data-id設(shè)置為redis.yaml
(可定義, 但必須要有文件擴(kuò)展名)
spring: application: name: my-goods profiles: active: dev cloud: nacos: config: server-addr: 114.116.212.76:8850 username: nacos password: nacos shared-configs: - data-id: redis.yaml refresh: true
refresh: true表示動態(tài)刷新配置
此時(shí)文件擴(kuò)展名即為data-id的后綴名
在nacos中增加配置
調(diào)皮的小伙伴可以試試這里「配置格式」配成
Properties
會發(fā)生什么
編寫代碼
@RefreshScope @RestController @RequestMapping("/goods") @RequiredArgsConstructor public class GoodsController { @Value("${redis}") public String redis; @GetMapping("/redis") public String redis(){ return "redis url is " + redis; } }
細(xì)心的小伙伴可能會說:哎呀呀,你這啥redis配置呀,假的吧!對,大家就假裝認(rèn)為我寫了個(gè)redis配置就好啦~
重啟項(xiàng)目測試
擴(kuò)展配置和共享配置的使用方式相同,增加extension-configs
即可
spring: cloud: nacos: config: server-addr: 114.116.212.76:8850 username: nacos password: nacos shared-configs: - data-id: redis.yaml refresh: true extension-configs: - data-id: extension.yaml refresh: true
擴(kuò)展配置的優(yōu)先級比共享配置優(yōu)先級高一些
Nacos中還有一個(gè)命名空間的概念,不同命名空間的配置相互隔離,相信大家也發(fā)現(xiàn)了,在測試案例中,我們一直使用的是一個(gè)public
的命名空間,這是Nacos的默認(rèn)命名空間。
通常我們會以項(xiàng)目名做命名空間進(jìn)行區(qū)分,來試試吧~
假設(shè)我們現(xiàn)在做一個(gè)商城項(xiàng)目,新建命名空間mall
將public
命名空間的配置克隆到mall
中
修改配置
spring: application: name: my-goods profiles: active: dev cloud: nacos: config: server-addr: 114.116.212.76:8850 username: nacos password: nacos namespace: mall shared-configs: - data-id: redis.yaml refresh: true extension-configs: - data-id: extension.yaml refresh: true
此時(shí)就只會讀取mall命名空間下的配置啦
講到現(xiàn)在,我們用的文件擴(kuò)展名和配置文件名(data id)依舊是默認(rèn)的properties
和服務(wù)名
,如果小伙伴想要修改的話可以修改file-extension
和prefix
file-extension
: 文件擴(kuò)展名
prefix
: data-id的前綴,默認(rèn)為服務(wù)名
我們現(xiàn)在已經(jīng)學(xué)會了如何使用@Value加@RefreshScope實(shí)現(xiàn)動態(tài)刷新配置,但是不得不說這種方式并不優(yōu)雅。
可以設(shè)想一下,凡是在@Value的地方都要加一個(gè)@RefreshScope注解,而且平常一個(gè)配置可能在多個(gè)地方使用,最后就會變成到處都是@RefreshScope, 要多難看就難看。
當(dāng)然,Nacos也提供了一個(gè)@NacosValue加@NacosConfigurationProperties方式讓我們可以不需要再使用@RefreshScope注解,但阿鑒覺得這種方式對系統(tǒng)侵入性太強(qiáng)了。
所以,阿鑒推薦使用@ConfigurationProperties方式管理配置進(jìn)行使用。
新建配置類, 在配置類上加上@RefreshScope注解
@Data @RefreshScope @ConfigurationProperties(prefix = "fruit") public class GoodsProperties { private String name; private double price; private int number; }
使用
@RestController @RequestMapping("/goods") public class GoodsController { @Autowired private GoodsProperties goodsProperties; @GetMapping("/all") public String all(){ String result = "name: %s, price: %s, number: %s"; return String.format(result, goodsProperties.getName(), goodsProperties.getPrice(), goodsProperties.getNumber()); } }
此時(shí)
GoodsController
可以不再加@RefreshScope注解了
到現(xiàn)在,我們已經(jīng)認(rèn)識了許多的配置格式了,先來總結(jié)一下有哪些吧
服務(wù)名
服務(wù)名.文件擴(kuò)展名
服務(wù)名-環(huán)境.文件擴(kuò)展名
擴(kuò)展配置
共享配置
那么,它們的優(yōu)先級是如何的呢?
這里,為了方便展示效果,阿鑒先告訴大家優(yōu)先級是怎樣的:
共享配置 < 擴(kuò)展配置 < 服務(wù)名 < 服務(wù)名.文件擴(kuò)展名 < 服務(wù)名-環(huán)境.文件擴(kuò)展名
修改配置
spring: application: name: my-goods profiles: active: dev cloud: config: server-addr: 114.116.212.76:8850 username: nacos password: nacos namespace: mall shared-configs: - data-id: redis.yaml refresh: true - data-id: share.properties refresh: true extension-configs: - data-id: extension.properties refresh: true
編寫代碼
@RefreshScope @RestController @RequestMapping("/goods") @RequiredArgsConstructor public class GoodsController { /** * 測試配置優(yōu)先級 */ @Value("${filename}") public String filename; @GetMapping("/filename") public String filename(){ return "now filename is " + filename; } }
在Nacos中建出以下配置文件
nacos中不允許文件為空,所以隨便在里面寫點(diǎn)什么就行
先在共享配置share.properties
文件中增加配置filename=share.properties
開始測試
緊接在,分別依次在
extension.properties
文件中增加filename=extension.properties
配置,
my-goods
文件中增加filename=my-goods
配置,
my-goods.properties
文件中增加filename=my-goods.properties
配置,
my-goods-dev.properties
文件中增加filename=my-goods-dev
配置
效果圖如下:
今天阿鑒給大家介紹了Nacos配置中心的功能,關(guān)于Nacos的動態(tài)配置刷新,多種配置方式,以及如何優(yōu)雅的使用它,最后還給大家測試了所有配置的優(yōu)先級:共享配置 < 擴(kuò)展配置 < 服務(wù)名 < 服務(wù)名.文件擴(kuò)展名 < 服務(wù)名-環(huán)境.文件擴(kuò)展名。希望小伙伴們有所收獲。
到此,相信大家對“Nacos配置中心實(shí)際操作”有了更深的了解,不妨來實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。