Spring Cloud Nacos配置管理方案
Spring Cloud Nacos
Nacos全稱Dynamic Naming and Configuration Service,它可以用于RPC框架中服務的注冊與發(fā)現,也可以作為配置中心管理應用的配置.
服務注冊與發(fā)現
使用過RPC框架同學對服務注冊與發(fā)現并不陌生,比如Dubbo默認使用Zookeeper作為注冊中心,完成服務的注冊與發(fā)現,而Nacos 同樣可以充當注冊中心的角色。
Nacos 提供了多種健康檢查機制,確保請求總是被健康的服務器處理。
配置管理
Nacos 還可以作為配置中心,在運行時動態(tài)修改配置,而無需重啟應用
對于配置的修改進行歷史版本管理,便于回滾和審計。
同時Nacos對多環(huán)境支持,即不同的環(huán)境(如開發(fā)、測試、生產)有不同的配置
Nacos 優(yōu)勢
Nacos具有數據模型簡單,提供了簡單便捷的控制臺界面,支持多種語言 如 Java/Golang/Python等優(yōu)勢,使得在Spring Cloud 微服務組件中占有重要的一席之地
Nacos 安裝與使用
jdk 安裝 與配置
Nacos 依賴JDK環(huán)境, 建議使用JDK 1.8 ,安裝完成配置好環(huán)境變量。
Nocas 配置中心使用
官網下載2.x版本,本文下載的是nacos-server-2.4.3.tar.gz
Nacos 部署方式
- 單機模式
- 集群模式
- 多集群模式
解壓后,進入nacos/bin 目錄 執(zhí)行 , -m standalone 參數指定以單機模式部署。啟動成功后輸入 http://ip:8848/nacos
進入控制臺,可以在控制臺進行配置的增刪查改
tar -zxvf nacos-server-2.4.3.tar.gz ./startup.sh -m standalone
Nacos 接入
Nacos 支持多種方式對接
- Open API
- Java SDK
- Nacos Spring
- Nacos Spring Boot
- Nacos Spring Cloud
Open API 方式
可以通過CURL命令發(fā)送指定請求,實現配置的增刪查改
獲取配置
請求URL /nacos/v1/cs/configs
請求參數
名稱 | 類型 | 是否必須 | 描述 |
---|---|---|---|
tenant | string | 否 | 租戶信息,對應 Nacos 的命名空間ID字段。 |
dataId | string | 是 | 配置 ID。 |
group | string | 是 | 配置分組。 |
通過CURL 查詢配置
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ā)布配置
請求 URL /nacos/v1/cs/configs
請求參數
名稱 | 類型 | 是否必須 | 描述 |
---|---|---|---|
tenant | string | 否 | 租戶信息,對應 Nacos 的命名空間ID字段 |
dataId | string | 是 | 配置 ID |
group | string | 是 | 配置分組 |
content | string | 是 | 配置內容 |
type | String | 否 | 配置類型 |
通過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
如果你的項目不是基于Spring Boot ,你也可以使用Nacos-client,
當然這種方式使用起來就不那么優(yōu)雅。
如果你愿意,也可以按照Open API格式構造Http 請求,與Nacos交互,這也是Nacos 很容易支持其他語言的原因,因為它支持Open API,
其他語言只要構造對應的Http請求即可。
Nacos-client 需要引入Pom依賴,Java代碼也很簡單,這種使用方式比較少。
<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> <!-- 請?zhí)鎿Q為實際版本號 --> </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 使用方式可以自行查看官方文檔,本文重點介紹Nacos Spring Cloud 接入方式,
主要內容包含
- 屬性自動刷新
- 多環(huán)境支持
首先提個問題為什么需要配置中心?
傳統(tǒng)的配置放到properties文件或者yaml文件中,隨著代碼一起打包,當需要修改配置時,應用需要重啟才生效。
此外配置中包含一些敏感信息,如果數據庫用戶名和密碼,這些配置放到 properties文件或者yaml文件存在安全隱患。 因此有了配置中心。
配置中心配置優(yōu)先級高于配置文件中配置
DataId
Spring Cloud 中 dataId 格式
${prefix}-${spring.profiles.active}.${file-extension}
- prefix 如果不配置則值為 spring.application.name
- spring.profiles.active 即為當前環(huán)境對應的 profile, 如果spring.profiles.active為空
對應dataId 蛻化為
${prefix}.${file-extension}
file-exetension 目前只支持 properties
和 yaml
類型 配置示例一
以下是Spring Cloud 一個簡單配置,我們沒有配置多環(huán)境那么,對應的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)境配置
對應的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 加在指定類上會自動刷新屬性。
本例中 codetonight.user沒有在配置中心配置,因此取配置文件中值。
codetonight.ak、codetonight.sk屬于敏感信息,我們將其放到配置中心,達到安全管控目的。
@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控制臺修改對應配置,查詢日志,應用監(jiān)聽到變更,再次請求配置已經生效
總結
Nacos 作為配置中心,實現了配置的集中管理,當配置更新時,不需要重啟應用立即生效,同時配置的修改具有版本管理功能,便于
審計和回滾等操作。此外對于一些敏感信息放到配置中心,通過權限控制增加安全性。
到此這篇關于Spring Cloud Nacos配置管理的文章就介紹到這了,更多相關Spring Cloud Nacos配置管理內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
maven下mybatis-plus和pagehelp沖突問題的解決方法
這篇文章主要介紹了maven下mybatis-plus和pagehelp沖突的解決方法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-08-08