Spring Cloud Alibaba學習筆記:Nacos服務配置中心

本篇要點

  • 介紹Nacos作爲服務配置中心的案例。
  • 介紹namespace、group、DataId三種方案的配置讀取。

Nacos服務配置中心之基礎配置

新建模塊

新建:cloudalibaba-config-nacos-client3377,引入依賴:

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

配置bootstrap.yml

Nacos和Spring Cloud config一樣,在項目初始化的時候,要保證先從配置中心進行配置拉取,拉取配置之後,才能保證項目的正常啓動。

另外,SpringBoot中配置文件的加載,bootstrap.yml優先於application.yml

# nacos配置
server:
  port: 3377

spring:
  application:
    name: nacos-config-client # 構成 Nacos 配置管理 dataId字段的一部分
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 #Nacos服務註冊中心地址
      config:
        server-addr: localhost:8848 #Nacos作爲配置中心地址
        file-extension: yaml #指定yaml格式的配置

配置之後,3377服務將從localhost:8848上讀取後綴名爲yaml的配置文件。

配置application.yml

spring:
  profiles:
    active: dev #表示開發環境

主啓動類

@EnableDiscoveryClient
@SpringBootApplication
public class NacosConfigClientMain3377 {
    public static void main(String[] args) {
        SpringApplication.run(NacosConfigClientMain3377.class, args);
    }
}

服務接口

@RestController
@RefreshScope //支持Nacos的動態刷新功能。
public class ConfigClientController {

    @Value("${config.info}")
    private String configInfo;

    @GetMapping("/config/info")
    public String getConfigInfo() {
        return configInfo;
    }
}

dataId的完整格式及新建配置

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

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

綜上所述,按照我們的配置,最後的dataId結果應該爲:

nacos-config-client-dev.yaml

我們選中配置列表,選擇新建配置,DataID就是我們剛剛得到的nacos-config-client-dev.yaml

新建配置完成之後是這樣:

測試

運行3377服務,調用接口http://localhost:3377/config/info測試配置讀取是否成功。

另外,它支持動態刷新,當我們修改手動修改配置中心數據時,修改的配置會被動態刷新,自動讀取。

Nacos服務配置中心之分類配置

解決問題

  1. 實際開發中,一個系統會準備多個環境,如dev開發環境,test測試環境,prod生產環境等,如何保證指定環境啓動時服務能正確讀取到Nacos上相應環境的配置文件?
  2. 一個大型分佈式微服務系統會有很多微服務子項目,每個微服務項目都會有相應的開發環境、測試環境等,如何管理這些微服務配置呢?

命名空間、DataId和Group的關係

Namespace默認爲空串,公共命名空間(public),分組默認是DEFAULT_GROUP。

Nacos的數據模型如下:

namespace用於區分部署環境【開發、測試、生產】,創建三個不同的namespace相互隔離。

Group可以把不同的微服務劃分到同一個分組中。

Service可以包含多個Cluster集羣,Nacos默認Cluster是DEFAULT,Cluster是對指定微服務的一個虛擬劃分。

Instance是微服務的實例。

三種方案的加載配置

Data Id的方案

保證命名空間相同,分組相同,只有Data Id不同

指定spring.profile.active和配置文件的DataId來使不同環境下讀取不同的配置。爲了演示這個效果,我們總共新建以下兩個配置,保證它們命名空間相同,分組相同,只有Data Id不同:

nacos-config-client-dev.yaml
nacos-config-client-test.yaml

通過spring.profile.active屬性就能進行多環境下配置文件的讀取,剛剛已經測試過dev環境,我們測試以下test環境,是否能夠讀取到:nacos-config-client-test.yaml的配置呢,答案是肯定的,可以訪問:http://localhost:3377/config/info測試一下。

spring:
  profles:
    active: test #表示測試環境

Group方案

保證命名空間相同,Data Id相同,只有分組不同

注意,這裏我們需要在application.yml中指定profile爲info,在bootstrap.yml指定group。

## bootstrap.yml
spring:
  application:
    name: nacos-config-client
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 #Nacos服務註冊中心地址
      config:
        server-addr: localhost:8848 #Nacos作爲配置中心地址
        file-extension: yaml #指定yaml格式的配置
        group: DEV_GROUP
## application.yml
spring:
  profiles:
    active: info

測試方法不用多說,在TEST_GROUP和DEV_GROUP之間切換,再訪問接口即可。

namespace方案

保證命名空間不同

新建兩個命名空間:dev和test。

如果需要指定命名空間,則指定yml中的namespace屬性即可。

spring:
  application:
    name: nacos-config-client
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 #Nacos服務註冊中心地址
      config:
        server-addr: localhost:8848 #Nacos作爲配置中心地址
        file-extension: yaml #指定yaml格式的配置
        group: TEST_GROUP
        namespace: 43d2f092-e338-4d31-b797-77466bdd8c8f
        
spring:
  profiles:
    active: dev #表示開發環境

將會從命名空間ID爲43d2f092-e338-4d31-b797-77466bdd8c8fTEST_GROUP組中,讀取nacos-config-client-dev的配置文件。

源碼下載

本系列文章爲《尚硅谷SpringCloud教程》的學習筆記【版本稍微有些不同,後續遇到bug再做相關說明】,主要做一個長期的記錄,爲以後學習的同學提供示例,代碼同步更新到Gitee:https://gitee.com/tqbx/spring-cloud-learning,並且以標籤的形式詳細區分每個步驟,這個系列文章也會同步更新。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章