您好,登錄后才能下訂單哦!
本篇內容主要講解“Nacos配置中心實際操作”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Nacos配置中心實際操作”吧!
一個更易于構建云原生應用的動態服務發現、配置管理和服務管理平臺。
通俗解釋就是:Nacos是一個注冊中心&配置中心
關于Nacos注冊中心的功能,在Nacos注冊中心實戰篇中,阿鑒已經給大家詳細介紹了,今天我們就來看看配置中心如何使用吧~
在介紹Nacos注冊中心實戰時,阿鑒已經介紹并搭建好了Nacos集群,這里就直接使用當時的Nacos集群了。
引入依賴
在my-goods
項目引入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新建配置文件并編寫配置
由于我們的配置中并未指定命名空間,所以默認使用
public
命名空間
Data ID: 在什么都沒有配置的情況下,Data ID為「服務名」或者「服務名.文件擴展名」,也就是
my-goods
或者my-goods.properties
(我們也沒有配置文件擴展名,默認為properties
)Group: 默認為
DEFAULT_GROUP
配置格式:即為文件格式,默認為
properties
配置內容:文件格式是
properties
, 配置內容即為properties
格式寫法
編寫代碼
@RestController @RequestMapping("/goods") public class GoodsController { @Value("${goods}") public String goods; @GetMapping("/config") public String config(){ return "this goods is " + goods; } }
啟動服務測試
此時已經讀取到遠程的配置
Nacos作為配置中心,將配置放在遠端管理只是基礎能力,更重要的是還提供了方便快捷的動態刷新配置功能。
修改代碼
要想使得配置具有自動刷新的能力,只需要在對應的類加上@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
發布完之后可以看到控制臺中出現監聽到配置變更的輸出
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]
再次調用接口
可以看到配置已經發生了變更
一般來說,在我們開發項目時,都會區分環境,比如開發環境、測試環境、生產環境,每個環境配置都會有些許不同,比如mysql配置。那我們就會在配置文件中增加以下配置:
spring: profiles: active: dev
此時Nacos將增加新的Data ID: 服務名-環境名.文件擴展名
即為 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; } }
新增配置
增加一個新的data id 為my-goods-dev.properties
配置
重啟項目測試
如果在my-goods-dev.properties
配置中增加goods=lemon
的配置,那么此時my-goods
的和my-goods-dev.properties
的goods
配置哪個會生效呢?
在my-goods-dev.properties
中增加goods=lemon
的配置
直接測試,此時無須重啟項目
從測試結果看出,Nacos的優先級和Spring的優先級相同,帶環境名的配置優先
雖然本篇一直只用my-goods
這一個服務做案例,但是大家不要忘了,我們這其實是一個微服務系統,在一個微服務系統里,總有些配置是會被許多服務共同使用的,比如Redis的配置。
如果每個服務都在自己的配置里單獨維護同樣的Redis配置,當Redis配置發生變更時,那么每個服務都要改一次,想想其實也是挺惡心的。
為了解決這個問題,Nacos同樣貼心的給我們提供了另一種配置方式:共享配置
編輯配置文件
增加shared-configs
,并將data-id設置為redis.yaml
(可定義, 但必須要有文件擴展名)
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表示動態刷新配置
此時文件擴展名即為data-id的后綴名
在nacos中增加配置
調皮的小伙伴可以試試這里「配置格式」配成
Properties
會發生什么
編寫代碼
@RefreshScope @RestController @RequestMapping("/goods") @RequiredArgsConstructor public class GoodsController { @Value("${redis}") public String redis; @GetMapping("/redis") public String redis(){ return "redis url is " + redis; } }
細心的小伙伴可能會說:哎呀呀,你這啥redis配置呀,假的吧!對,大家就假裝認為我寫了個redis配置就好啦~
重啟項目測試
擴展配置和共享配置的使用方式相同,增加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
擴展配置的優先級比共享配置優先級高一些
Nacos中還有一個命名空間的概念,不同命名空間的配置相互隔離,相信大家也發現了,在測試案例中,我們一直使用的是一個public
的命名空間,這是Nacos的默認命名空間。
通常我們會以項目名做命名空間進行區分,來試試吧~
假設我們現在做一個商城項目,新建命名空間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
此時就只會讀取mall命名空間下的配置啦
講到現在,我們用的文件擴展名和配置文件名(data id)依舊是默認的properties
和服務名
,如果小伙伴想要修改的話可以修改file-extension
和prefix
file-extension
: 文件擴展名
prefix
: data-id的前綴,默認為服務名
我們現在已經學會了如何使用@Value加@RefreshScope實現動態刷新配置,但是不得不說這種方式并不優雅。
可以設想一下,凡是在@Value的地方都要加一個@RefreshScope注解,而且平常一個配置可能在多個地方使用,最后就會變成到處都是@RefreshScope, 要多難看就難看。
當然,Nacos也提供了一個@NacosValue加@NacosConfigurationProperties方式讓我們可以不需要再使用@RefreshScope注解,但阿鑒覺得這種方式對系統侵入性太強了。
所以,阿鑒推薦使用@ConfigurationProperties方式管理配置進行使用。
新建配置類, 在配置類上加上@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()); } }
此時
GoodsController
可以不再加@RefreshScope注解了
到現在,我們已經認識了許多的配置格式了,先來總結一下有哪些吧
服務名
服務名.文件擴展名
服務名-環境.文件擴展名
擴展配置
共享配置
那么,它們的優先級是如何的呢?
這里,為了方便展示效果,阿鑒先告訴大家優先級是怎樣的:
共享配置 < 擴展配置 < 服務名 < 服務名.文件擴展名 < 服務名-環境.文件擴展名
修改配置
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 { /** * 測試配置優先級 */ @Value("${filename}") public String filename; @GetMapping("/filename") public String filename(){ return "now filename is " + filename; } }
在Nacos中建出以下配置文件
nacos中不允許文件為空,所以隨便在里面寫點什么就行
先在共享配置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配置中心的功能,關于Nacos的動態配置刷新,多種配置方式,以及如何優雅的使用它,最后還給大家測試了所有配置的優先級:共享配置 < 擴展配置 < 服務名 < 服務名.文件擴展名 < 服務名-環境.文件擴展名。希望小伙伴們有所收獲。
到此,相信大家對“Nacos配置中心實際操作”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。