爲什麼Nacos Config?
在分佈式系統中,由於服務特別的多,那是不是我的配置文件也特別的多,我總不可能要改配置就一個個改把,打個比方我需要修改數據庫的地址賬號密碼等,我一個個提供方去改,這未免效率也太低了把(〃>皿<)
所以這個時候我們就需要Nacos Config
Nacos Config 介紹
Nacos 提供用於存儲配置和其他元數據的 key/value 存儲,爲分佈式系統中的外部化配置提供服務器端和客戶端支持。使用 Spring Cloud Alibaba Nacos Config,您可以在 Nacos Server 集中管理你 Spring Cloud 應用的外部屬性配置。
如果有學習過Eureka 的Config應該就知道了.
就是Spring Cloud Config Server 和 Client 的代替方案,也就是Nacos 的 Config …
Nacos Config 的缺點: 沒有提供配置的管理,還是我們需要自己去管理.
Nacos Config 的優點:
方便呀! 直接給你集成進了Nacos還不爽?嘻嘻. 其實在 Config Server的優點都有.
使用過程
POM
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
<version>${latest.version}</version>
</dependency>
Nacos註冊中心
進入Nacos中心 新建配置
創建名爲 bootstrap.yml
的配置文件並刪除之前創建的 application.yml
配置文件
知道config server的都知道,不刪除還是會走自己這裏的application.yml
注意:** Spring Boot 配置文件的加載順序,依次爲 bootstrap.properties
-> bootstrap.yml
-> application.properties
-> application.yml
,其中 bootstrap.properties 配置爲最高優先級
# 注意了 : 配置順序不要放反了,不然會出問題
spring:
application:
#nacos配置文件的名字
name: service-consumer-config
cloud:
nacos:
config:
#nacos的端口
server-addr: localhost:8848
#指明是什麼格式,不加默認是propertes
file-extension: yaml
搞定收工
附:擴展閱讀
Endpoint 信息查看
Spring Boot 應用支持通過 Endpoint 來暴露相關信息,Nacos Config Starter 也支持這一點。在使用之前需要在 maven 中添加 spring-boot-starter-actuator
依賴,並在配置中允許 Endpoints 的訪問。
- nacos-discovery: http://localhost:8080/actuator/nacos-discovery
{
"subscribe": [
{
"jsonFromServer": "",
"name": "service-consumer",
"groupName": "DEFAULT_GROUP",
"clusters": null,
"cacheMillis": 1000,
"hosts": [],
"lastRefTime": 0,
"checksum": "",
"allIPs": false,
"key": "service-consumer",
"valid": true,
"keyEncoded": "service-consumer"
},
{
"jsonFromServer": "",
"name": "service-provider",
"groupName": "DEFAULT_GROUP",
"clusters": null,
"cacheMillis": 1000,
"hosts": [],
"lastRefTime": 0,
"checksum": "",
"allIPs": false,
"key": "service-provider",
"valid": true,
"keyEncoded": "service-provider"
}
],
"NacosDiscoveryProperties": {
"serverAddr": "192.168.141.132:8848",
"endpoint": "",
"namespace": "",
"watchDelay": 30000,
"logName": "",
"service": "service-consumer",
"weight": 1,
"clusterName": "DEFAULT",
"namingLoadCacheAtStart": "false",
"metadata": {
"preserved.register.source": "SPRING_CLOUD"
},
"registerEnabled": true,
"ip": "192.168.141.1",
"networkInterface": "",
"port": 8080,
"secure": false,
"accessKey": "",
"secretKey": ""
}
}
- nacos-config: http://localhost:8080/actuator/nacos-config
{
"NacosConfigProperties": {
"serverAddr": "192.168.141.132:8848",
"encode": null,
"group": "DEFAULT_GROUP",
"prefix": null,
"fileExtension": "yaml",
"timeout": 3000,
"endpoint": null,
"namespace": null,
"accessKey": null,
"secretKey": null,
"contextPath": null,
"clusterName": null,
"name": null,
"sharedDataids": null,
"refreshableDataids": null,
"extConfig": null
},
"RefreshHistory": [
{
"timestamp": "2019-06-30 18:30:45",
"dataId": "service-consumer-config.yaml",
"md5": "690fd78b5ae9fac5b545c1a8d7ec4e2b"
},
{
"timestamp": "2019-06-30 18:22:08",
"dataId": "service-consumer-config.yaml",
"md5": "40b12ffc9d305ec1cad65d606e8f4708"
}
],
"Sources": [
{
"lastSynced": "2019-06-30 18:22:05",
"dataId": "service-consumer-config.yaml"
}
]
}
注意: Sources 表示此客戶端從哪些 Nacos Config 配置項中獲取了信息,RefreshHistory 表示動態刷新的歷史記錄,最多保存20條,NacosConfigProperties 則爲 Nacos Config Starter 本身的配置
更多配置
配置項 | key | 默認值 | 說明 |
---|---|---|---|
服務端地址 | spring.cloud.nacos.config.server-addr | ||
DataId前綴 | spring.cloud.nacos.config.prefix | spring.application.name | |
Group | spring.cloud.nacos.config.group | DEFAULT_GROUP | |
dataID後綴及內容文件格式 | spring.cloud.nacos.config.file-extension | properties | dataId的後綴,同時也是配置內容的文件格式,目前只支持 properties |
配置內容的編碼方式 | spring.cloud.nacos.config.encode | UTF-8 | 配置的編碼 |
獲取配置的超時時間 | spring.cloud.nacos.config.timeout | 3000 | 單位爲 ms |
配置的命名空間 | spring.cloud.nacos.config.namespace | 常用場景之一是不同環境的配置的區分隔離,例如開發測試環境和生產環境的資源隔離等。 | |
AccessKey | spring.cloud.nacos.config.access-key | ||
SecretKey | spring.cloud.nacos.config.secret-key | ||
相對路徑 | spring.cloud.nacos.config.context-path | 服務端 API 的相對路徑 | |
接入點 | spring.cloud.nacos.config.endpoint | UTF-8 | 地域的某個服務的入口域名,通過此域名可以動態地拿到服務端地址 |
是否開啓監聽和自動刷新 | spring.cloud.nacos.config.refresh.enabled | true |
更多介紹
Nacos爲用戶提供包括動態服務發現,配置管理,服務管理等服務基礎設施,幫助用戶更靈活,更輕鬆地構建,交付和管理他們的微服務平臺,基於 Nacos, 用戶可以更快速的構建以“服務”爲中心的現代雲原生應用。Nacos 可以和 Spring Cloud、Kubernetes/CNCF、Dubbo 等微服務生態無縫融合,爲用戶提供更卓越的體驗
配置文件動態刷新
例如:
這裏我們使用 @Value
註解來將對應的配置注入到 某個類
的 某個變量
字段,並添加 @RefreshScope
打開動態刷新功能