Nacos Config 使用


簡介

nacos主要提供了以下幾個功能:
1、配置中心
2、服務發現和服務健康監測
3、動態DNS
4、服務及其元數據管理
常用的功能是配置中心、服務發現
本文主要是對Nacos Config 官方文檔的補充,官方文檔地址:https://github.com/alibaba/spring-cloud-alibaba/wiki/Nacos-config
本文樣例代碼:

部署:

https://nacos.io/zh-cn/docs/deployment.html

配置中心:

跟spring cloud config 類似,但是更易用,輕量,運維成本也更低
與apollo相比配置中心的功能更少一點,但是夠用了。部署方面apollo最少需要部署5台,而nacos只需要3台

配置中心使用

nacos控制台添加配置

Data ID:    nacos-config.properties
Group  :    DEFAULT_GROUP
配置格式:    Properties
配置內容:   user.name=nacos-config-properties
            user.age=90
注意dataid是以 properties(默認的文件擴展名方式)為擴展名。dataid必須要帶擴展名不然獲取不到對應配置

在 Nacos Spring Cloud 中,dataId 的完整格式如下:

${prefix}-${spring.profile.active}.${file-extension}
  • prefix 默認為 spring.application.name 的值,也可以通過配置項 spring.cloud.nacos.config.prefix來配置。
  • spring.profile.active 即為當前環境對應的 profile,詳情可以參考 Spring Boot文檔。 注意:當 spring.profile.active 為空時,對應的連接符 - 也將不存在,dataId 的拼接格式變成 \({prefix}.\){file-extension}
  • file-exetension 為配置內容的數據格式,可以通過配置項 spring.cloud.nacos.config.file-extension 來配置。目前只支持 properties 和 yaml 類型。

client端:

添加依賴:

        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>
        <!--需要引入該jar才能使bootstrap配置文件生效-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-context</artifactId>
        </dependency>

添加配置文件:

本文所有配置文件都是配置到bootstrap.properties

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

配置全局開關 默認true開啟

spring.cloud.nacos.config.enabled = true

配置文件擴展

spring.cloud.nacos.config.file-extension=yaml

dataid必須要帶擴展名,且和file-extension配置相同,原因上面已講述

client端-獲取配置

獲取配置方式1:通過Environment對象

在項目的任何地方獲取Environment對象都可以拉取nacos配置

@SpringBootApplication
public class ProviderApplication {
    public static void main(String[] args) {
        ConfigurableApplicationContext applicationContext = SpringApplication.run(ProviderApplication.class, args);
        String userName = applicationContext.getEnvironment().getProperty("user.name");
        String userAge = applicationContext.getEnvironment().getProperty("user.age");
        System.err.println("user name :"+userName+"; age: "+userAge);
    }
}

注意當你使用域名的方式來訪問 Nacos 時,spring.cloud.nacos.config.server-addr 配置的方式為 域名:port。 例如 Nacos 的域名為abc.com.nacos,監聽的端口為 80,則 spring.cloud.nacos.config.server-addr=abc.com.nacos:80。 注意 80 端口不能省略。

配置是否自動刷新,默認true

spring.cloud.nacos.config.refresh-enabled

獲取配置方式2(項目中一般使用方式):

通過注解獲取

@Configuration
@ConfigurationProperties
@Value

@Configuration;@ConfigurationProperties需要結合@RefreshScope注解來動態刷新配置
所以在項目中建議使用@Value來拉取配置

    @Value("${user.name}")
    private String userName

單機部署時有時會遇到拉取不到配置的坑,這時重啟nacos即可。

可以使用Open-API 拼接url直接訪問配置檢查是否有問題

http://127.0.0.1:8848/nacos/v1/cs/configs?dataId=xxxx.yaml&group=DEFAULT_GROUP

若配置正確卻讀取不到配置,重啟即可

profile粒度的配置

通過spring的配置參數來指定profile:

spring.profiles.active

nacos會先加載\({spring.application.name}.\){file-extension:properties} 為前綴的基礎配置,

然后再加載dataid為 \({spring.application.name}-\){profile}.${file-extension:properties} 的基礎配置,且若配置名稱相同后者會覆蓋前者

此案例中我們通過 spring.profiles.active= 的方式寫死在配置文件中,而在真正的項目實施過程中這個變量的值是需要不同環境而有不同的值。這個時候通常的做法是通過 -Dspring.profiles.active= 參數指定其配置來達到環境間靈活的切換。

自定義namespace

spring.cloud.nacos.config.namespace=[命名空間id]

默認為public這個保留空間

自定義group

spring.cloud.nacos.config.group=[group名稱]

默認DEFAULT_GROUP

所以項目默認是讀取namespace為public中的DEFAULT_GROUP組下的\({spring.application.name}.\){file-extension:properties}配置文件,且都會拉取一遍這個配置,相當於默認兜底配置

自定義擴展的DataId配置

配置文件

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.extension-configs[0].data-id=ext-config-common01.properties

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

# 3、Data Id 既不在默認的組,也支持動態刷新
# 配置data-id名稱 必須帶擴展名稱 
spring.cloud.nacos.config.extension-configs[2].data-id=ext-config-common03.properties
# group值
spring.cloud.nacos.config.extension-configs[2].group=REFRESH_GROUP
# 是否動態刷新 默認不支持
spring.cloud.nacos.config.extension-configs[2].refresh=true
  • 多個 Data Id 同時配置時,他的優先級關系是 spring.cloud.nacos.config.extension-configs[n].data-id 其中 n 的值越大,優先級越高
  • spring.cloud.nacos.config.extension-configs[n].data-id 的值必須帶文件擴展名,文件擴展名既可支持 properties,又可以支持 yaml/yml。 此時 spring.cloud.nacos.config.file-extension 的配置對自定義擴展配置的 Data Id 文件擴展名沒有影響。

通過自定義擴展的 Data Id 配置,既可以解決多個應用間配置共享的問題,又可以支持一個應用有多個配置文件。

為了更加清晰的在多個應用間配置共享的 Data Id ,你可以通過以下的方式來配置:

# 配置支持共享的 Data Id
spring.cloud.nacos.config.shared-configs[0].data-id=common.yaml

# 配置 Data Id 所在分組,缺省默認 DEFAULT_GROUP
spring.cloud.nacos.config.shared-configs[0].group=GROUP_APP1

# 配置Data Id 在配置變更時,是否動態刷新,缺省默認 false
spring.cloud.nacos.config.shared-configs[0].refresh=true

可以看到:

  • 通過 spring.cloud.nacos.config.shared-configs[n].data-id 來支持多個共享 Data Id 的配置。
  • 通過 spring.cloud.nacos.config.shared-configs[n].group 來配置自定義 Data Id 所在的組,不明確配置的話,默認是 DEFAULT_GROUP。
  • 通過 spring.cloud.nacos.config.shared-configs[n].refresh 來控制該Data Id在配置變更時,是否支持應用中動態刷新,默認false。

配置的優先級

Spring Cloud Alibaba Nacos Config 目前提供了三種配置能力從 Nacos 拉取相關的配置。

A: 通過 spring.cloud.nacos.config.shared-configs[n].data-id 支持多個共享 Data Id 的配置

B: 通過 spring.cloud.nacos.config.extension-configs[n].data-id 的方式支持多個擴展 Data Id 的配置

C: 通過內部相關規則(應用名、應用名+ Profile )自動生成相關的 Data Id 配置

當三種方式共同使用時,他們的一個優先級關系是:A < B < C

三種方式的加載源碼在NacosPropertySourceLocator 類locate方法

this.loadSharedConfiguration(composite);
this.loadExtConfiguration(composite);
this.loadApplicationConfiguration(composite, dataIdPrefix, this.nacosConfigProperties, env);

由此也可以得出優先級關系A < B < C

無論哪種方式配置參數不同的命名空間之間的配置不會共享

實際應用 (待完善)

多環境部署,例如:DEV TEST PRO

不同項目之間配置獨立不共享

多個項目之間共享部分配置,比如注冊中心地址等

單個項目多個配置文件

同一部署環境中不同情況配置

灰度發布


免責聲明!

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



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