Spring Cloud Nacos配置管理方案
Spring Cloud Nacos
Nacos全稱(chēng)Dynamic Naming and Configuration Service,它可以用于RPC框架中服務(wù)的注冊(cè)與發(fā)現(xiàn),也可以作為配置中心管理應(yīng)用的配置.
服務(wù)注冊(cè)與發(fā)現(xiàn)
使用過(guò)RPC框架同學(xué)對(duì)服務(wù)注冊(cè)與發(fā)現(xiàn)并不陌生,比如Dubbo默認(rèn)使用Zookeeper作為注冊(cè)中心,完成服務(wù)的注冊(cè)與發(fā)現(xiàn),而Nacos 同樣可以充當(dāng)注冊(cè)中心的角色。
Nacos 提供了多種健康檢查機(jī)制,確保請(qǐng)求總是被健康的服務(wù)器處理。
配置管理
Nacos 還可以作為配置中心,在運(yùn)行時(shí)動(dòng)態(tài)修改配置,而無(wú)需重啟應(yīng)用
對(duì)于配置的修改進(jìn)行歷史版本管理,便于回滾和審計(jì)。
同時(shí)Nacos對(duì)多環(huán)境支持,即不同的環(huán)境(如開(kāi)發(fā)、測(cè)試、生產(chǎn))有不同的配置
Nacos 優(yōu)勢(shì)
Nacos具有數(shù)據(jù)模型簡(jiǎn)單,提供了簡(jiǎn)單便捷的控制臺(tái)界面,支持多種語(yǔ)言 如 Java/Golang/Python等優(yōu)勢(shì),使得在Spring Cloud 微服務(wù)組件中占有重要的一席之地
Nacos 安裝與使用
jdk 安裝 與配置
Nacos 依賴(lài)JDK環(huán)境, 建議使用JDK 1.8 ,安裝完成配置好環(huán)境變量。
Nocas 配置中心使用
官網(wǎng)下載2.x版本,本文下載的是nacos-server-2.4.3.tar.gz
Nacos 部署方式
- 單機(jī)模式
- 集群模式
- 多集群模式
解壓后,進(jìn)入nacos/bin 目錄 執(zhí)行 , -m standalone 參數(shù)指定以單機(jī)模式部署。啟動(dòng)成功后輸入 http://ip:8848/nacos 進(jìn)入控制臺(tái),可以在控制臺(tái)進(jìn)行配置的增刪查改
tar -zxvf nacos-server-2.4.3.tar.gz ./startup.sh -m standalone

Nacos 接入
Nacos 支持多種方式對(duì)接
- Open API
- Java SDK
- Nacos Spring
- Nacos Spring Boot
- Nacos Spring Cloud
Open API 方式
可以通過(guò)CURL命令發(fā)送指定請(qǐng)求,實(shí)現(xiàn)配置的增刪查改
獲取配置
請(qǐng)求URL /nacos/v1/cs/configs
請(qǐng)求參數(shù)
| 名稱(chēng) | 類(lèi)型 | 是否必須 | 描述 |
|---|---|---|---|
| tenant | string | 否 | 租戶(hù)信息,對(duì)應(yīng) Nacos 的命名空間ID字段。 |
| dataId | string | 是 | 配置 ID。 |
| group | string | 是 | 配置分組。 |
通過(guò)CURL 查詢(xún)配置
curl -X GET 'http://127.0.0.1:8848/nacos/v2/cs/config?dataId=codetonight.ak&group=nacos-demo&namespaceId=public'
返回
{"code":0,"message":"success","data":"akserert123"}發(fā)布配置
請(qǐng)求 URL /nacos/v1/cs/configs
請(qǐng)求參數(shù)
| 名稱(chēng) | 類(lèi)型 | 是否必須 | 描述 |
|---|---|---|---|
| tenant | string | 否 | 租戶(hù)信息,對(duì)應(yīng) Nacos 的命名空間ID字段 |
| dataId | string | 是 | 配置 ID |
| group | string | 是 | 配置分組 |
| content | string | 是 | 配置內(nèi)容 |
| type | String | 否 | 配置類(lèi)型 |
通過(guò)CURL 發(fā)布配置
curl -d 'dataId=nacos.example' \ -d 'group=DEFAULT_GROUP' \ -d 'namespaceId=public' \ -d 'content=contentTest' \ -X POST 'http://127.0.0.1:8848/nacos/v2/cs/config'
Java SDK
如果你的項(xiàng)目不是基于Spring Boot ,你也可以使用Nacos-client,
當(dāng)然這種方式使用起來(lái)就不那么優(yōu)雅。
如果你愿意,也可以按照Open API格式構(gòu)造Http 請(qǐng)求,與Nacos交互,這也是Nacos 很容易支持其他語(yǔ)言的原因,因?yàn)樗С諳pen API,
其他語(yǔ)言只要構(gòu)造對(duì)應(yīng)的Http請(qǐng)求即可。
Nacos-client 需要引入Pom依賴(lài),Java代碼也很簡(jiǎn)單,這種使用方式比較少。
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client</artifactId>
<version>${nacos.version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.36</version> <!-- 請(qǐng)?zhí)鎿Q為實(shí)際版本號(hào) -->
</dependency> String serverAddr = "http://localhost:8848";
String dataId = "nacos.example";
String group = "DEFAULT_GROUP";
Properties properties = new Properties();
properties.put("serverAddr", serverAddr);
ConfigService configService = NacosFactory.createConfigService(properties);
String content = configService.getConfig(dataId, group, 5000);
System.out.println(content);
configService.addListener(dataId, group, new Listener() {
@Override
public void receiveConfigInfo(String configInfo) {
System.out.println("recieve1:" + configInfo);
}
@Override
public Executor getExecutor() {
return null;
}
});
Thread.sleep(1000*3600);Nacos Spring Cloud
Nacos Spring,Nacos Spring Boot 使用方式可以自行查看官方文檔,本文重點(diǎn)介紹Nacos Spring Cloud 接入方式,
主要內(nèi)容包含
- 屬性自動(dòng)刷新
- 多環(huán)境支持
首先提個(gè)問(wèn)題為什么需要配置中心?
傳統(tǒng)的配置放到properties文件或者yaml文件中,隨著代碼一起打包,當(dāng)需要修改配置時(shí),應(yīng)用需要重啟才生效。
此外配置中包含一些敏感信息,如果數(shù)據(jù)庫(kù)用戶(hù)名和密碼,這些配置放到 properties文件或者yaml文件存在安全隱患。 因此有了配置中心。
配置中心配置優(yōu)先級(jí)高于配置文件中配置
DataId
Spring Cloud 中 dataId 格式
${prefix}-${spring.profiles.active}.${file-extension}- prefix 如果不配置則值為 spring.application.name
- spring.profiles.active 即為當(dāng)前環(huán)境對(duì)應(yīng)的 profile, 如果spring.profiles.active為空
對(duì)應(yīng)dataId 蛻化為
${prefix}.${file-extension}file-exetension 目前只支持 properties 和 yaml 類(lèi)型 配置示例一
以下是Spring Cloud 一個(gè)簡(jiǎn)單配置,我們沒(méi)有配置多環(huán)境那么,對(duì)應(yīng)的dataId
nacos-demo.properties
# bootstrap.properties spring.application.name=nacos-demo spring.cloud.nacos.config.server-addr=http://127.0.0.1:8848 spring.cloud.nacos.config.namespace=public spring.cloud.nacos.config.group=nacos-demo spring.cloud.nacos.config.file-extension=properties
多環(huán)境配置
對(duì)應(yīng)的dataId nacos-demo-dev.properties
# bootstrap.properties spring.application.name=nacos-demo spring.cloud.nacos.config.server-addr=http://127.0.0.1:8848 spring.cloud.nacos.config.namespace=public spring.cloud.nacos.config.group=nacos-demo spring.cloud.nacos.config.file-extension=properties
#application.properties spring.profiles.active=dev
#application-dev.properties codetonight.user=codetonight
java 代碼使用
@RefreshScope 加在指定類(lèi)上會(huì)自動(dòng)刷新屬性。
本例中 codetonight.user沒(méi)有在配置中心配置,因此取配置文件中值。
codetonight.ak、codetonight.sk屬于敏感信息,我們將其放到配置中心,達(dá)到安全管控目的。
@RestController
@RefreshScope
public class NacosTestController {
@Value(value = "${codetonight.ak}")
private String ak;
@Value(value = "${codetonight.sk}")
private String token;
@Value(value = "${codetonight.user}")
private String user;
@GetMapping("/getInfo")
public String getInfo(){
return ak + "=>" + token + "=>" + user;
}
}
在Nacos控制臺(tái)修改對(duì)應(yīng)配置,查詢(xún)?nèi)罩?,?yīng)用監(jiān)聽(tīng)到變更,再次請(qǐng)求配置已經(jīng)生效

總結(jié)
Nacos 作為配置中心,實(shí)現(xiàn)了配置的集中管理,當(dāng)配置更新時(shí),不需要重啟應(yīng)用立即生效,同時(shí)配置的修改具有版本管理功能,便于
審計(jì)和回滾等操作。此外對(duì)于一些敏感信息放到配置中心,通過(guò)權(quán)限控制增加安全性。
到此這篇關(guān)于Spring Cloud Nacos配置管理的文章就介紹到這了,更多相關(guān)Spring Cloud Nacos配置管理內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- springCloud集成nacos config的過(guò)程
- SpringCloud-Nacos服務(wù)注冊(cè)與發(fā)現(xiàn)方式
- SpringCloud連接不上遠(yuǎn)程N(yùn)acos問(wèn)題排查
- springcloud nacos的賦值均衡和動(dòng)態(tài)刷新
- Alibaba?SpringCloud集成Nacos、openFeign實(shí)現(xiàn)負(fù)載均衡的解決方案
- SpringCloud Nacos集群搭建過(guò)程詳解
- SpringCloud及Nacos服務(wù)注冊(cè)IP選擇問(wèn)題解決方法
- springcloud+nacos實(shí)現(xiàn)灰度發(fā)布示例詳解
- springCloud集成nacos啟動(dòng)時(shí)報(bào)錯(cuò)原因排查
相關(guān)文章
java環(huán)境變量path和classpath的配置
這篇文章主要為大家詳細(xì)介紹了java系統(tǒng)環(huán)境變量path和classpath的配置過(guò)程,感興趣的小伙伴們可以參考一下2016-07-07
Java二分法查找_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
這篇文章主要介紹了Java二分法查找的相關(guān)資料,需要的朋友可以參考下2017-04-04
使用Jenkins配置Git+Maven的自動(dòng)化構(gòu)建的方法
這篇文章主要介紹了使用Jenkins配置Git+Maven的自動(dòng)化構(gòu)建的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-01-01
java.text.DecimalFormat類(lèi)十進(jìn)制格式化
這篇文章主要為大家詳細(xì)介紹了java.text.DecimalFormat類(lèi)十進(jìn)制格式化的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-03-03
Java中四種9*9乘法表的實(shí)現(xiàn)方式(附代碼)
這篇文章主要介紹了Java中四種9*9乘法表的實(shí)現(xiàn)方式(附代碼),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11
Springboot整合Shiro使用yml文件管理Urls方式
這篇文章主要介紹了Springboot整合Shiro使用yml文件管理Urls方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2026-03-03
Java語(yǔ)言中4種內(nèi)部類(lèi)的超詳細(xì)講解
這篇文章主要給大家介紹了關(guān)于Java語(yǔ)言中4種內(nèi)部類(lèi)的超詳細(xì)講解,內(nèi)部類(lèi)可以分為:實(shí)例內(nèi)部類(lèi)、靜態(tài)內(nèi)部類(lèi)和成員內(nèi)部類(lèi),每種內(nèi)部類(lèi)都有它特定的一些特點(diǎn),文中介紹的非常詳細(xì),需要的朋友可以參考下2023-04-04
JAVA實(shí)現(xiàn)利用第三方平臺(tái)發(fā)送短信驗(yàn)證碼
本文以注冊(cè)為例,在SpringMVC+Spring+Mybatis框架的基礎(chǔ)上完成該短信驗(yàn)證碼功能。需要的朋友一起來(lái)看下吧2016-12-12
Java兩個(gè)變量的互換(不借助第3個(gè)變量)具體實(shí)現(xiàn)方法
這篇文章主要介紹了Java兩個(gè)變量的互換(不借助第3個(gè)變量)具體實(shí)現(xiàn)方法,需要的朋友可以參考下2014-02-02

