SpringCloud Nacos 作為Config配置中心,SpringCloud Nacos 配置動態更新


SpringCloud Nacos 作為Config配置中心,SpringCloud Nacos 配置動態更新

 

================================

©Copyright 蕃薯耀 2021-03-29

https://www.cnblogs.com/fanshuyao/

 

一、SpringCloud Nacos 概述
Nacos 是一個 Alibaba 開源的、易於構建雲原生應用的動態服務發現、配置管理和服務管理平台。
使用 Spring Cloud Alibaba Nacos Config,可基於 Spring Cloud 的編程模型快速接入 Nacos 配置管理功能。

官方地址:

https://nacos.io/zh-cn/index.html

官方文檔:

https://nacos.io/zh-cn/docs/what-is-nacos.html

Spring官方文檔:

https://spring-cloud-alibaba-group.github.io/github-pages/hoxton/en-us/index.html


二、SpringCloud Nacos 下載安裝啟動
見:

https://www.cnblogs.com/fanshuyao/p/14577910.html

 

三、SpringCloud Nacos 作為服務注冊發現中心
見:

https://www.cnblogs.com/fanshuyao/p/14577910.html

 

官方文檔:

https://spring-cloud-alibaba-group.github.io/github-pages/hoxton/en-us/index.html#_spring_cloud_alibaba_nacos_discovery

 

四、SpringCloud Nacos 作為Config配置中心
官方中文文檔:

https://spring-cloud-alibaba-group.github.io/github-pages/hoxton/zh-cn/index.html#_spring_cloud_alibaba_nacos_config

 

英文文檔:

https://spring-cloud-alibaba-group.github.io/github-pages/hoxton/en-us/index.html#_spring_cloud_alibaba_nacos_config

 

Nacos1.4.1報錯: longPolling error ,java.util.concurrent.RejectedExecutionException 解決方案:

https://www.cnblogs.com/fanshuyao/p/14572830.html

 

SpringCloud Nacos 作為Config配置中心步驟:

1、pom.xml文件引入依賴

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>${spring-cloud.version}</version><!-- Hoxton.SR10 -->
            <type>pom</type>
            <scope>import</scope>
        </dependency>
        
        <dependency>
                    <groupId>com.alibaba.cloud</groupId>
                    <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                    <version>2.2.5.RELEASE</version><!-- 當Nacos的版本為:1.4.1,必須使用2.2.5.RELEASE版本,不然Nacos配置在第一次更新后會報錯,后面再也更新不了,因為版本不一致導致的 -->
                    <type>pom</type>
                    <scope>import</scope>
          </dependency>

    </dependencies>
</dependencyManagement>

 

2、添加bootstrap.properties配置文件

bootstrap文件優先級高於application.properties
注意(都是官方文檔說的):
(1)必須使用 bootstrap.properties配置文件來配置 Nacos Server 地址
(2)${spring.profiles.active}當通過配置文件來指定時必須放在 bootstrap.properties 文件中。

 

具體內容是:

#必須使用 bootstrap.properties配置文件來配置 Nacos Server 地址
#${spring.profiles.active}當通過配置文件來指定時必須放在 bootstrap.properties 文件中。

#bootstrap.properties,bootstrap文件優先級高於application.properties

#spring.devtools.restart.enabled=false

spring.profiles.active=dev
server.port=8805

spring.application.name=SPRING-CLOUD-NACOS-CONSUMER

#配置nacos服務地址,通過 Spring Cloud 原生注解 @EnableDiscoveryClient 開啟服務注冊發現功能:
#單機配置:127.0.0.1:8848
#集群配置:192.168.170.11:8848,192.168.170.12:8848,192.168.170.13:8848
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848


#服務提供者的服務名,接口調用需要用到
my.nacos.service.name=SPRING-CLOUD-NACOS-SERVICE

#配置中心,相關配置
#配置文件的后綴,默認值是:properties,可以配置成:yaml
spring.cloud.nacos.config.file-extension=properties
#配置文件更新的服務地址
#單機配置:127.0.0.1:8848
#集群配置:192.168.170.11:8848,192.168.170.12:8848,192.168.170.13:8848
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
#完全關閉 Nacos Config 的自動化配置
#spring.cloud.nacos.config.enabled=false

#DataId 默認使用 `spring.application.name` 配置跟文件擴展名結合(配置格式默認使用 properties), GROUP 不配置默認使用 DEFAULT_GROUP。因此該配置文件對應的 Nacos Config 配置的 DataId 為 nacos-config.properties, GROUP 為 DEFAULT_GROUP

#DataId匹配模式
#Nacos DataId的格式:
#${spring.profiles.active}為空時:${spring.application.name}.${file-extension:properties}
#${spring.profiles.active}不為空時:${spring.application.name}-${spring.profiles.active}.${file-extension:properties}
#若spring.application.name=SPRING-CLOUD-NACOS-CONSUMER,且spring.profiles.active=dev,則Nacos服務配置的DataId就是:SPRING-CLOUD-NACOS-CONSUMER-dev.properties
#若spring.application.name=myconfig,且無spring.profiles.active配置,則Nacos服務配置的DataId就是:myconfig.properties

#指定特定的DataId配置文件
#從默認的組DEFAULT_GROUP取配置名為aaa.properties進行更新
#如果設置了組:spring.cloud.nacos.config.group,則在Nacos服務配置時,Group屬性就必須一致
#spring.cloud.nacos.config.name=aaa.properties

#Group匹配模式:
#當使用spring.cloud.nacos.config.group,在Nacos服務配置時,Group屬性就必須一致,而DataId還是原來的匹配規則,只是定義了一個組,只能從該組取,默認的組是DEFAULT_GROUP,沒有配置組,就是從默認組取
spring.cloud.nacos.config.group=mygroup

#命名空間(namespace)模式
#Namespace 的常用場景之一是不同環境的配置的區分隔離,例如開發測試環境和生產環境的資源(如配置、服務)隔離等。
#在沒有明確指定 ${spring.cloud.nacos.config.namespace} 配置的情況下, 默認使用的是 Nacos 上 Public 這個namespae。
#在命名空間管理,新增自定義命名空間:dev,命名空間ID不用填寫,自動生成,保存后把命名空間ID復制,賦值給spring.cloud.nacos.config.namespace
#匹配方式是:
#若spring.application.name=SPRING-CLOUD-NACOS-CONSUMER,且spring.profiles.active=dev,則Nacos服務配置的DataId就是:SPRING-CLOUD-NACOS-CONSUMER.properties,而命名空間的名稱就是dev,和spring.profiles.active配置一致
#spring.cloud.nacos.config.namespace=81671a8b-7994-4142-9be9-029360875ad7

#配置的優先級
#Nacos Config 目前提供了三種配置能力從 Nacos 拉取相關的配置
#A: 通過 spring.cloud.nacos.config.shared-dataids 支持多個共享 Data Id 的配置
#B: 通過 spring.cloud.nacos.config.ext-config[n].data-id 的方式支持多個擴展 Data Id 的配置
#C: 通過內部相關規則(應用名、應用名+ Profile )自動生成相關的 Data Id 配置

#服務端如何開啟鑒權
#當服務端開啟鑒權:nacos.core.auth.enabled=true后,客戶端訪問需要賬號和密碼,當前的配置,服務注冊中心和配置中心都可以正常訪問
#服務注冊中心、服務配置中心的同時配置的賬號和密碼
#spring.cloud.nacos.username=nacos
#spring.cloud.nacos.password=nacos
#服務注冊中心配置的賬號和密碼:
#spring.cloud.nacos.discovery.username=nacos
#spring.cloud.nacos.discovery.password=nacos
#服務配置中心的賬號和密碼:
#spring.cloud.nacos.config.username=nacos
#spring.cloud.nacos.config.password=nacos
#配置如下:
#spring.cloud.nacos.username=nacos
#spring.cloud.nacos.password=nacos


#測試配置的值
config.text=1

 

3、application.properties配置文件修改

測試bootstrap文件優先級高於application.properties,application.properties配置的屬性,會覆蓋bootstrap.properties的屬性,因為bootstrap.properties先加載。

#測試配置的值
config.text=application.properties-1

 


4、啟動類
加上@EnableDiscoveryClient注解

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

/**
 * 通過 Spring Cloud 原生注解 @EnableDiscoveryClient 開啟服務注冊發現功能:
 *
 */
@SpringBootApplication
@EnableDiscoveryClient
public class SpringCloud8805NacosWebApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringCloud8805NacosWebApplication.class, args);
    }

}

 

5、Controller請求類
加上@RefreshScope,實現Nacos配置文件的動態刷新,不加不會刷新。
@RefreshScope不能配置在啟動類上,無效果。
@RefreshScope作用域是:ElementType.TYPE, ElementType.METHOD

 

實現配置文件:config.text=xxx的動態更新

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

import com.lqy.springCloud.Result;

//@RefreshScope:實現Nacos配置文件的動態刷新,不能配置在啟動類上,無效果,作用域是:ElementType.TYPE, ElementType.METHOD
@RefreshScope
@RestController
@RequestMapping("/web")
public class WebController {

    @Value("${config.text}")
    private String configText;
    
    
    @RequestMapping(value="/config", produces = MediaType.APPLICATION_JSON_VALUE)
    public Result config() {
        return Result.ok(configText);
    }

}

 

五、SpringCloud Nacos Config配置中心動態更新

1、啟動Nacos Server
在bin路徑(D:\0soft\nacos-server-1.4.1\nacos\bin)打開cmd命令窗口,輸入下面的命令啟動:

startup.cmd -m standalone

 

2、瀏覽器打開Nacos Server控制台

http://127.0.0.1:8848/nacos

登錄名:nacos
密碼:nacos

 

3、配置管理
展開【配置管理】,點擊【配置列表】,在最右邊有一個加號的添加按鈕,添加相應的配置

 

 


六、項目實現配置文件動態刷新,bootstrap.properties增加配置

#配置文件的后綴,默認值是:properties,可以配置成:yaml
spring.cloud.nacos.config.file-extension=properties

#配置文件更新的服務地址
#單機配置:127.0.0.1:8848
#集群配置:192.168.170.11:8848,192.168.170.12:8848,192.168.170.13:8848
spring.cloud.nacos.config.server-addr=127.0.0.1:8848

 

七、SpringCloud Nacos Config配置DataId配置規則

DataId 默認使用 `spring.application.name` 配置跟文件擴展名結合(配置格式默認使用 properties), GROUP 不配置默認使用 DEFAULT_GROUP。因此該配置文件對應的 Nacos Config 配置的 DataId 為 nacos-config.properties, GROUP 為 DEFAULT_GROUP

1、支持DataId匹配模式的配置
Nacos DataId的格式:

${spring.profiles.active}為空時:${spring.application.name}.${file-extension:properties}
${spring.profiles.active}不為空時:${spring.application.name}-${spring.profiles.active}.${file-extension:properties}

 

具體示例:
若spring.application.name=SPRING-CLOUD-NACOS-CONSUMER,且spring.profiles.active=dev,則Nacos服務配置的DataId就是:SPRING-CLOUD-NACOS-CONSUMER-dev.properties
若spring.application.name=myconfig,且無spring.profiles.active配置,則Nacos服務配置的DataId就是:myconfig.properties

指定特定的DataId配置文件
從默認的組DEFAULT_GROUP取配置名為aaa.properties進行更新
如果設置了組:spring.cloud.nacos.config.group,則在Nacos服務配置時,Group屬性就必須一致

spring.cloud.nacos.config.name=aaa.properties

 


2、支持自定義 Group 的配置

當使用spring.cloud.nacos.config.group,在Nacos服務配置時,Group屬性就必須一致,而DataId還是原來的匹配規則,只是定義了一個組,只能從該組取,默認的組是DEFAULT_GROUP,沒有自定義組,就是從默認組取

spring.cloud.nacos.config.group=mygroup

 

3、支持自定義 namespace 的配置

Namespace 的常用場景之一是不同環境的配置的區分隔離,例如開發測試環境和生產環境的資源(如配置、服務)隔離等。
在沒有明確指定 ${spring.cloud.nacos.config.namespace} 配置的情況下, 默認使用的是 Nacos 上 Public 這個namespae。
在命名空間管理,新增自定義命名空間:dev,命名空間ID不用填寫,自動生成,保存后把命名空間ID復制,賦值給spring.cloud.nacos.config.namespace
匹配方式是:
若spring.application.name=SPRING-CLOUD-NACOS-CONSUMER,且spring.profiles.active=dev,則Nacos服務配置的DataId就是:SPRING-CLOUD-NACOS-CONSUMER.properties,而命名空間的名稱就是dev,和spring.profiles.active配置一致

spring.cloud.nacos.config.namespace=81671a8b-7994-4142-9be9-029360875ad7

 


4、支持自定義擴展的 Data Id 配置
Nacos Config 從 0.2.1 版本后,可支持自定義 Data Id 的配置。關於這部分詳細的設計可參考 這里。 一個完整的配置案例如下所示:

spring.application.name=opensource-service-provider
spring.cloud.nacos.config.server-addr=127.0.0.1:8848

# config external configuration
# 1、Data Id 在默認的組 DEFAULT_GROUP,不支持配置的動態刷新
spring.cloud.nacos.config.ext-config[0].data-id=ext-config-common01.properties

# 2、Data Id 不在默認的組,不支持動態刷新
spring.cloud.nacos.config.ext-config[1].data-id=ext-config-common02.properties
spring.cloud.nacos.config.ext-config[1].group=GLOBALE_GROUP

# 3、Data Id 既不在默認的組,也支持動態刷新
spring.cloud.nacos.config.ext-config[2].data-id=ext-config-common03.properties
spring.cloud.nacos.config.ext-config[2].group=REFRESH_GROUP
spring.cloud.nacos.config.ext-config[2].refresh=true

 

可以看到:
通過 spring.cloud.nacos.config.ext-config[n].data-id 的配置方式來支持多個 Data Id 的配置。
通過 spring.cloud.nacos.config.ext-config[n].group 的配置方式自定義 Data Id 所在的組,不明確配置的話,默認是 DEFAULT_GROUP。
通過 spring.cloud.nacos.config.ext-config[n].refresh 的配置方式來控制該 Data Id 在配置變更時,是否支持應用中可動態刷新, 感知到最新的配置值。默認是不支持的。

注意:
多個 Data Id 同時配置時,他的優先級關系是 spring.cloud.nacos.config.ext-config[n].data-id 其中 n 的值越大,優先級越高。
spring.cloud.nacos.config.ext-config[n].data-id 的值必須帶文件擴展名,文件擴展名既可支持 properties,又可以支持 yaml/yml。
此時 spring.cloud.nacos.config.file-extension 的配置對自定義擴展配置的 Data Id 文件擴展名沒有影響。
通過自定義擴展的 Data Id 配置,既可以解決多個應用間配置共享的問題,又可以支持一個應用有多個配置文件。

 

5、配置的優先級
Nacos Config 目前提供了三種配置能力從 Nacos 拉取相關的配置

A: 通過 spring.cloud.nacos.config.shared-dataids 支持多個共享 Data Id 的配置
B: 通過 spring.cloud.nacos.config.ext-config[n].data-id 的方式支持多個擴展 Data Id 的配置
C: 通過內部相關規則(應用名、應用名+ Profile )自動生成相關的 Data Id 配置

 


八、完全關閉 Nacos Config 的自動化配置
通過設置 spring.cloud.nacos.config.enabled = false 來完全關閉 Spring Cloud Nacos Config

spring.cloud.nacos.config.enabled=false

 


九、Nacos Config Starter 更多的配置項信息

spring.cloud.nacos.config.server-addr
服務端地址
Nacos Server 啟動監聽的ip地址和端口

spring.cloud.nacos.config.name
配置對應的 DataId
先取 prefix,再去 name,最后取 spring.application.name

spring.cloud.nacos.config.prefix
配置對應的 DataId
先取 prefix,再去 name,最后取 spring.application.name

spring.cloud.nacos.config.encode
配置內容編碼
讀取的配置內容對應的編碼

spring.cloud.nacos.config.group
GROUP
默認是:DEFAULT_GROUP,配置對應的組

spring.cloud.nacos.config.fileExtension
文件擴展名
默認是:properties,配置項對應的文件擴展名,目前支持 properties 和 yaml(yml)

spring.cloud.nacos.config.timeout
獲取配置超時時間
默認是:3000,客戶端獲取配置的超時時間(毫秒)

spring.cloud.nacos.config.endpoint
接入點
地域的某個服務的入口域名,通過此域名可以動態地拿到服務端地址

spring.cloud.nacos.config.namespace
命名空間
常用場景之一是不同環境的配置的區分隔離,例如開發測試環境和生產環境的資源(如配置、服務)隔離等

spring.cloud.nacos.config.accessKey
AccessKey,當要上阿里雲時,阿里雲上面的一個雲賬號名

spring.cloud.nacos.config.secretKey
SecretKey,當要上阿里雲時,阿里雲上面的一個雲賬號密碼

spring.cloud.nacos.config.contextPath
Nacos Server 對應的 context path,Nacos Server 對外暴露的 context path

spring.cloud.nacos.config.clusterName
集群,配置成Nacos集群名稱

spring.cloud.nacos.config.sharedDataids
共享配置,共享配置的 DataId, "," 分割

spring.cloud.nacos.config.refreshableDataids
共享配置動態刷新,共享配置中需要動態刷新的 DataId, "," 分割

spring.cloud.nacos.config.extConfig
自定義 Data Id 配置,屬性是個集合,內部由 Config POJO 組成。Config 有 3 個屬性,分別是 dataId, group 以及 refresh

 


十、Nacos服務端開啟鑒權
當服務端開啟鑒權:nacos.core.auth.enabled=true后,客戶端訪問需要賬號和密碼,當前的配置,服務注冊中心和配置中心都可以正常訪問

服務注冊中心、服務配置中心的同時配置的賬號和密碼(已經驗證)

spring.cloud.nacos.username=nacos
spring.cloud.nacos.password=nacos

 

僅服務注冊中心配置的賬號和密碼(未驗證):

#spring.cloud.nacos.discovery.username=nacos
#spring.cloud.nacos.discovery.password=nacos

 

僅服務配置中心的賬號和密碼(未驗證):

#spring.cloud.nacos.config.username=nacos
#spring.cloud.nacos.config.password=nacos

 

十一、Nacos Config 對外暴露的 Endpoint
Nacos Config 內部提供了一個 Endpoint, 對應的 endpoint id 為 nacos-config。

Endpoint 暴露的 json 中包含了三種屬性:
Sources: 當前應用配置的數據信息
RefreshHistory: 配置刷新的歷史記錄
NacosConfigProperties: 當前應用 Nacos 的基礎配置信息

 

 

 

(時間寶貴,分享不易,捐贈回饋,^_^)

 

================================

©Copyright 蕃薯耀 2021-03-29

https://www.cnblogs.com/fanshuyao/

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM