SpringCloud Nacos 配置中心

eknown發表於2020-04-19

Nacos Config Center


上一篇介紹了 Spring Cloud 中配置中心的使用,地址:https://mp.weixin.qq.com/s/QcIaGAYUvPBIqJM8oMbVvQ

這一節介紹 Nacos 作為配置中心使用,不需要 Github


這裡首先需要注意,Nacos 在Spring、Spring Boot、Spring Cloud 這三種環境下的依賴、配置和使用方法都是不同的。這裡僅以 Spring Cloud + Nacos 為例,闡述 Spring Cloud 中使用 Nacos 作為服務註冊中心和配置中心。更具體的資料可以參考官方文件:https://nacos.io/zh-cn/docs/quick-start.html


一、Nacos Server 建立配置

啟動 Nacos Server 端,瀏覽器訪問。

在 Nacos 中建立三個配置檔案:consumer-demo.yamlconsumer-demo-dev.yamlconsumer-demo-prod.yaml,內容略有區別。

nacos-config-file

consumer-demo.yml

nacos-config-demo


二、Nacos-Consumer

建立一個 consumer-demo 專案,依賴如下:

<properties>
	<java.version>1.8</java.version>
	<spring-cloud.version>Hoxton.SR3</spring-cloud.version>
	<nacos.version>0.9.0.RELEASE</nacos.version>
</properties>

<dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            <version>${nacos.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
            <version>${nacos.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

在啟動類加上 @EnableDiscoveryClient 註解(這表示是啟用服務註冊,也可以不啟用而僅從 Nacos 讀取配置資訊)。

刪除 application.yml

配置資訊應寫在 bootstrap.propertiesbootstrap.yml 檔案中:

spring:
  application:
    name: consumer-demo
  cloud:
    nacos:
      config:
        file-extension: yaml
        server-addr: 127.0.0.1:8848
        prefix: ${spring.application.name} # 預設值就是 spring.application.name
      discovery:
        server-addr: 127.0.0.1:8848
  profiles:
    active: dev

查詢的配置檔案,即 nacos 中的 dataId,應該是:${prefix}-${spring.profile.active}.${file-extension}

如果 ${active} 不存在,那麼會查詢: ${prefix}.${file-extension}

啟動專案,控制檯出現類似如下資訊:

2020-04-15 17:00:17.946  INFO 16392 --- [           main] o.s.c.a.n.c.NacosPropertySourceBuilder   : Loading nacos data, dataId: 'consumer-demo.yaml', group: 'DEFAULT_GROUP'
2020-04-15 17:00:17.953  INFO 16392 --- [           main] o.s.c.a.n.c.NacosPropertySourceBuilder   : Loading nacos data, dataId: 'consumer-demo-dev.yaml', group: 'DEFAULT_GROUP'
2020-04-15 17:00:17.955  INFO 16392 --- [           main] b.c.PropertySourceBootstrapConfiguration : Located property source: [BootstrapPropertySource {name='bootstrapProperties-consumer-demo-dev.yaml'}, BootstrapPropertySource {name='bootstrapProperties-consumer-demo.yaml'}]
2020-04-15 17:00:17.960  INFO 16392 --- [           main] c.e.c.ConsumerDemoApplication            : The following profiles are active: dev

我們可以看到從 Nacos 載入了 consumer-demo.yaml 和 consumer-demo-dev.yaml


編寫一個測試介面:

@RefreshScope // 注意要加上 @RefreshScope 註解,否則即使 RefreshEventListener 檢測到配置資訊被更新了,下面的 msg 還是會保持之前的值
@RestController
@RequestMapping(value = "test")
public class TestAction {

    @NacosValue("${msg}")
    private String msg; // 用 @NacosValue 獲取不到值 (null)

    @Value("${msg}")
    private String vMsg; // 用 @Value 獲取到了值

    @GetMapping(value = "")
    public String hello() {
        return msg + ":" + vMsg;
    }
}

開啟瀏覽器,輸入 test 介面地址:

在 nacos 上修改一下 msg 的值,觀察控制檯,出現:

2020-04-15 17:11:43.355  INFO 16392 --- [-127.0.0.1_8848] o.s.c.e.event.RefreshEventListener       : Refresh keys changed: [msg]

表明檢測到 msg 配置資訊改變。重新整理 test 介面,發現 msg 的值隨之改變了。


三、持久化

關閉 nacos server,重新啟動,發現上面建立的配置資訊沒有丟失,這說明 nacos 把配置資訊持久化儲存了。

Nacos 預設使用嵌入式資料庫,也支援修改資料來源為 MySQL


參考:

  • 方誌朋 —— Spring Cloud Alibaba 教程:使用 Nacos 作為配置中心:https://blog.csdn.net/forezp/article/details/90729945
  • 擼帝 —— Nacos Config 客戶端的使用:https://www.jianshu.com/p/d8ed2eb2041d
  • Nacos 官方文件:https://nacos.io/zh-cn/docs/quick-start.html

相關文章