Nacos配置文件使用經(jīng)驗(yàn)及CAP原則詳解
1、入門(mén)
發(fā)布配置
Data ID: nacos‐simple‐demo.yaml
Group : DEFAULT_GROUP
配置格式: YAML
配置內(nèi)容: common:
; config1: something
新建配置
在spring cloud生態(tài)下使用nacos config很容易,引入pom依賴:
<dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency>
創(chuàng)建bootstrap.properties文件,并添加nacos server的連接地址即可:
spring.application.name=demo-api spring.cloud.nacos.config.server-addr=nacos服務(wù)器地址 spring.cloud.nacos.config.prefix=nacos匹配配置前綴,默認(rèn)為${spring.application.name}
2、配置文件
2.1. 規(guī)則配置
nacos上的dataId完整格式如下:
${prefix}-${spring.profile.active}.${file-extension}
- prefix:取自bootstrap配置文件里面
spring.cloud.nacos.config.prefix
的值,而該配置的默認(rèn)值又為${spring.application.name} - spring.profile.active:取當(dāng)前環(huán)境的profile。如果項(xiàng)目
spring.profile.active
為空,dataId格式變成${prefix}.${file-extension}
- file-exetension:為配置內(nèi)容的數(shù)據(jù)格式,可以通過(guò)配置項(xiàng)
spring.cloud.nacos.config.file-extension
來(lái)配置。目前只支持 properties和yaml類(lèi)型,默認(rèn)properties。
實(shí)際測(cè)試,如果配置了spring.profile.active,項(xiàng)目會(huì)主動(dòng)獲取nacos服務(wù)器上的配置文件包括:
${prefix}-${spring.profile.active}.${file-extension}
${prefix}.${file-extension}
2.2. 共享配置
大一點(diǎn)的項(xiàng)目,通常需要將配置信息拆分成多個(gè)配置文件,如:數(shù)據(jù)庫(kù)連接信息、多語(yǔ)言配置等。因此就存在了兩種情況:
- 一個(gè)項(xiàng)目會(huì)加載多個(gè)配置文件。
- 多個(gè)項(xiàng)目會(huì)共享同一個(gè)配置文件。
此時(shí)可以使用 shared-configs
或 extension-configs
,一直沒(méi)發(fā)現(xiàn)二者之間有啥區(qū)別,作用和用法基本一樣。例如:
spring.cloud.nacos.config.shared-configs[0].data-id=mysql.properties spring.cloud.nacos.config.shared-configs[0].group=DATABASE_GROUP spring.cloud.nacos.config.shared-configs[1].data-id=redis.properties spring.cloud.nacos.config.shared-configs[1].group=DATABASE_GROUP spring.cloud.nacos.config.shared-configs[2].data-id=common-i18n.properties spring.cloud.nacos.config.shared-configs[2].group=I18N_GROUP spring.cloud.nacos.config.shared-configs[2].refresh=true
上述配置中,將 shared-configs[n] 替換成 extension-configs[n],并沒(méi)有任何不同。
3. 優(yōu)先級(jí)
1.配置文件優(yōu)先級(jí)
按照前面介紹的,在使用nacos后,項(xiàng)目的配置文件來(lái)源多了起來(lái),按照從高到低
的優(yōu)先級(jí)順序分別為:
- 通過(guò)內(nèi)部相關(guān)規(guī)則
${prefix}-${spring.profile.active}.${file-extension}
自動(dòng)生成相關(guān)的Data Id配置。 - 通過(guò)
extension-configs
方式支持的Data Id配置。 - 通過(guò)
shared-configs
方式支持的Data Id配置。
2. 共享配置內(nèi)部?jī)?yōu)先級(jí)
共享配置 shared-configs[n]
、extension-configs[n]
內(nèi)部,n
的值越大,優(yōu)先級(jí)越高。
前面的例子中優(yōu)先級(jí)順序:common-i18n.properties > redis.properties > mysql.properties
3. 本地優(yōu)先級(jí)
如果在配置文件中開(kāi)啟了nacos config,在nacos服務(wù)器和項(xiàng)目本地,都創(chuàng)建了同樣的配置文件。nacos服務(wù)器上的配置項(xiàng),優(yōu)先級(jí)比本地高。
4. 通過(guò)日志查看優(yōu)先級(jí)
當(dāng)你實(shí)在搞不清naco配置文件加載的優(yōu)先級(jí)時(shí),不要慌,直接看啟動(dòng)項(xiàng)目日志即可。
在spring項(xiàng)目中開(kāi)啟nacos config后,啟動(dòng)項(xiàng)目會(huì)在控制臺(tái)打印出nacos加載的所有配置文件,而且按照優(yōu)先級(jí)順序從前往后排序。
如按照前面的配置,打印出來(lái)的日志為:
[PropertySourceBootstrapConfiguration.java:112] [] [ ] - Located property source: [BootstrapPropertySource {name='bootstrapProperties-demo-api-native.properties,DEFAULT_GROUP'}, BootstrapPropertySource {name='bootstrapProperties-demo-api.properties,DEFAULT_GROUP'}, BootstrapPropertySource {name='bootstrapProperties-demo-api,DEFAULT_GROUP'}, BootstrapPropertySource {name='bootstrapProperties-common-i18n.properties,I18N_GROUP'}, BootstrapPropertySource {name='bootstrapProperties-redis.properties,DATABASE_GROUP'}, BootstrapPropertySource {name='bootstrapProperties-mysql.properties,DATABASE_GROUP'}]
4. 項(xiàng)目規(guī)劃
這里談?wù)勔粋€(gè)項(xiàng)目創(chuàng)建時(shí),有關(guān)nacos config相關(guān)配置規(guī)劃的想法。
1. 分配置文件
項(xiàng)目本地配置文件的功能分類(lèi):
- bootstrap-{profile} :主要存放 nacos 的環(huán)境信息,不同環(huán)境下的nacos服務(wù)器地址可能不同。
- bootstrap :存放 nacos 與環(huán)境無(wú)關(guān)的基礎(chǔ)信息,如 shared-configs[n]、extension-configs 等,以及服務(wù)名稱(chēng)、端口號(hào)等。
- application-{profile} :主要用于開(kāi)發(fā)環(huán)境的配置,本地開(kāi)發(fā)時(shí)有些參數(shù)不希望直接改公共的 nacos,可以在配置文件中修改。
- application :本地開(kāi)發(fā)時(shí),存放與環(huán)境無(wú)關(guān)的基礎(chǔ)信息。
總體來(lái)說(shuō),在開(kāi)啟nacos config服務(wù)后,都是以服務(wù)器上 ${prefix}-${spring.profile.active}.${file-extension}
為準(zhǔn)。本地application
的作用及其有限,除非滿足一些特殊的本地開(kāi)發(fā)場(chǎng)景需求。
2. 分環(huán)境
雖然可以在一個(gè)nacos服務(wù)器上,通過(guò)${prefix}-${spring.profile.active}.${file-extension}
來(lái)分環(huán)境,但不建議這么做。
不同環(huán)境nacos的服務(wù)器健壯程度、安全保密程度等,都是有不同要求的。一般建議在一個(gè)nacos服務(wù)器上,根據(jù)不同環(huán)境,連接不同的 namespace
。甚至,根據(jù)不同環(huán)境,連接不同的nacos服務(wù)器
。
我目前常用的做法,就是項(xiàng)目工程中不存放 application 相關(guān)的配置文件,只保留 bootstrap.properties
文件。不同環(huán)境下的配置文件是完全通過(guò)不同的nacos服務(wù)器或namespace來(lái)區(qū)分的,在本地運(yùn)行時(shí)或 DevOps 部署時(shí),通過(guò)傳遞參數(shù)來(lái)運(yùn)行。例如本地運(yùn)行時(shí) Program arguments 的配置:
--nacos.url=http://x.x.x.x:xxxx --nacos.config.namespace=xxx --spring.cloud.nacos.discovery.enabled=false --rocketmq.consumer-enabled=false
3. 分項(xiàng)目
通過(guò) GROUP 來(lái)區(qū)分項(xiàng)目。而多個(gè)項(xiàng)目公用的一些配置,可獨(dú)立出幾個(gè) GROUP,如:數(shù)據(jù)庫(kù)連接配置、多語(yǔ)言配置等。
5. CAP
我們知道分布式 cap 理論中,只能滿足 cp 或 ap。就注冊(cè)中心而言分類(lèi)如下:
- eureka 實(shí)現(xiàn)的是ap;
- zookeeper(基于 paxos算法)、consul(基于 raft算法) 實(shí)現(xiàn)的是 cp;
- nacos 既能實(shí)現(xiàn) ap,也能實(shí)現(xiàn) cp(基于 raft算法)。
nacos 集群默認(rèn)支持的是 cap 原則中的 ap 原則。但是Nacos 集群可切換為CP原則,切換命令如下:
curl -X PUT '$NACOS_SERVER:8848/nacos/v1/ns/operator/switches?entry=serverMode&value=CP'
同時(shí),微服務(wù)的 bootstrap.properties 還需配置如下選項(xiàng),指明注冊(cè)為臨時(shí)/永久實(shí)例。 AP模式不支持?jǐn)?shù)據(jù)一致性,所以只支持服務(wù)注冊(cè)的臨時(shí)實(shí)例,CP模式支持服務(wù)注冊(cè)的永久實(shí)例,滿足配置文件的一致性
#false為永久實(shí)例,true表示臨時(shí)實(shí)例開(kāi)啟,注冊(cè)為臨時(shí)實(shí)例 spring.cloud.nacos.discovery.ephemeral=true
以上就是Nacos配置文件使用經(jīng)驗(yàn)及CAP規(guī)則詳解的詳細(xì)內(nèi)容,更多關(guān)于Nacos配置文件CAP的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
使用IntelliJ IDEA調(diào)式Stream流的方法步驟
本文主要介紹了使用IntelliJ IDEA調(diào)式Stream流的方法步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-05-05Spring Security OAuth2認(rèn)證授權(quán)示例詳解
這篇文章主要介紹了Spring Security OAuth2認(rèn)證授權(quán)示例詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09SpringBoot參數(shù)驗(yàn)證的幾種方式小結(jié)
在日常的接口開(kāi)發(fā)中,為了防止非法參數(shù)對(duì)業(yè)務(wù)造成影響,經(jīng)常需要對(duì)接口的參數(shù)進(jìn)行校驗(yàn),例如登錄的時(shí)候需要校驗(yàn)用戶名和密碼是否為空,所以本文介紹了SpringBoot參數(shù)驗(yàn)證的幾種方式,需要的朋友可以參考下2024-07-07Spring?MVC內(nèi)置過(guò)濾器功能示例詳解
這篇文章主要為大家介紹了Spring?MVC內(nèi)置過(guò)濾器使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-09-09mybatis自動(dòng)生成時(shí)如何設(shè)置不生成Example類(lèi)詳解
這篇文章主要給大家介紹了關(guān)于mybatis自動(dòng)生成時(shí)如何設(shè)置不生成Example類(lèi)的相關(guān)資料,文中介紹的非常詳細(xì),對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起看看吧。2017-05-05Java使用OpenFeign管理多個(gè)第三方服務(wù)調(diào)用
最近開(kāi)發(fā)了一個(gè)統(tǒng)一調(diào)度類(lèi)的項(xiàng)目,需要依賴多個(gè)第三方服務(wù),這些服務(wù)都提供了HTTP接口供我調(diào)用。感興趣的可以了解一下2021-06-06springBoot集成Elasticsearch 報(bào)錯(cuò) Health check failed的解決
這篇文章主要介紹了springBoot集成Elasticsearch 報(bào)錯(cuò) Health check failed的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-08-08java使用elasticsearch分組進(jìn)行聚合查詢過(guò)程解析
這篇文章主要介紹了java使用elasticsearch分組進(jìn)行聚合查詢過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-02-02