日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

Spring Cloud Alibaba —— Nacos Config 配置中心

發布時間:2025/3/12 javascript 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Spring Cloud Alibaba —— Nacos Config 配置中心 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

導航

  • 引言
  • 一、什么是配置中心
  • 二、常見的配置中心組件
  • 三、Nacos Config 入門
  • 四、Nacos Config 動態配置
    • 4.1 硬編碼方式(默認支持動態生效)
    • 4.2 屬性注入
  • 五、配置共享
    • 5.1 相同微服務不同環境間共享
    • 5.2 不同微服務配置共享
  • 六、Nacos Config 的幾個概念
  • 總結

引言

本文介紹 Nacos 作為注冊中心的使用方法,相關文章《Spring Cloud Alibaba——Nacos實現服務治理》。

一、什么是配置中心

在微服務架構中,關于配置信息,存在一些問題。

  • 配置文件相對分散,不好維護。
  • 配置文件不好區分開發、測試、生產環境。
  • 配置文件無法實時更新。
  • 針對這些問題,引入了配置中心組件,其主要思路是:

  • 集中配置數據,統一管理,提供一套標準接口。
  • 由各個服務主動拉取配置中心中的配置信息。
  • 動態更新。
  • 二、常見的配置中心組件

    • Apollo
      由攜程開源的分布式配置中心。特點很多,如配置實時生效,支持灰度發布功能,并能對所有配置進行版本管理、操作審計等功能,提供開放平臺API,文檔詳盡。
    • Disconf
      由百度開源的分布式配置中心,底層基于Zookeeper實現配置變更后的實時通知和生效。
    • Spring Cloud Config
      Spring Cloud 自帶的配置中心組件。可以和 Spring 無縫銜接,使用方便,并且它 配置存儲支持Git 。但缺少可視化的操作界面,配置也無法實時生效,需要重啟和刷新。
    • Nacos
      Spring Cloud Alibaba 技術棧中的一個組件,Nacos 除了可以做服務注冊中心,也兼顧了服務配置中心。

    三、Nacos Config 入門

    以 Nacos Server 作為 配置中心,各個微服務作為客戶端,將微服務中的配置文件統一存放在 Nacos 上,然后各個微服務從 Nacos 上拉取配置。

    以 shop-product 微服務為例,簡單演示下效果。

    1、引入 nacos-config 依賴

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

    2、將配置轉移到 Nacos
    登錄 Nacos 控制臺,點擊新建配置,將本地配置粘貼到 Nacos 編輯器中,格式選擇 yaml。

    Data Id 規則
    應用名-環境.格式
    例如
    spring.application.name=service-product
    spring.profiles.active=dev
    spring.cloud.nacos.config.file-extension=yaml
    那么 data Id 就是 service-product-dev.yaml

    3、引入 bootstrap.yml 文件
    bootstrap.yml 作為新的引導文件,用于拉取 Nacos 上的遠程配置信息。

    spring boot 配置文件優先級
    bootstrap.properties > bootstrap.yml > application.properties > application.yml

    spring:application:name: service-productprofiles:active: devcloud:nacos:config:server-addr: localhost:8848file-extension: yaml # 配置格式(默認是 properties)

    4、測試
    啟動項目,可以正常訪問。

    四、Nacos Config 動態配置

    4.1 硬編碼方式(默認支持動態生效)

    硬編碼方式通過 Environment 對象提供的 getProperty(key) 來獲取配置信息,本身就是支持動態更新的。

    @Autowired private ConfigurableApplicationContext applicationContext;@GetMapping("/appName") public String getConfig() {String appName = applicationContext.getEnvironment().getProperty("config.appName");return appName; }

    啟動程序,請求 appName 接口,獲取不到任何數據:

    打開 Nacos Config,配置 config.appName 信息,并發布:

    直接重新訪問,不需要重啟,即可取得數據:

    4.2 屬性注入

    使用 @Value("${key}") 的形式完成配置的注入:

    @Value("${config.appName}") private String appName;@GetMapping("/appName") public String getConfig() {return appName; }

    這種方式可以解決硬編碼的高耦合問題,代碼也更優雅,是Spring 推薦的使用方式,但是這種方式默認是不支持動態刷新配置的,需要加入額外的一個類注解——@RefreshScope:

    @RefreshScope @RestController @RequestMapping("/config") public class ConfigController {@Value("${config.appName}")private String appName;@GetMapping("/appName")public String getConfig() {return appName;} }

    五、配置共享

    配置共享旨在解決重復配置項的問題。Nacos 支持配置共享,即可以將大家都有的重復配置項提取到共享配置中。

    5.1 相同微服務不同環境間共享

    相同微服務的不同環境的公共配置,只需要在配置的 Data Id 上去掉諸如 -dev 等環境標識即可。

    例如,dev 環境的配置是 service-product-dev.yaml ,test 環境的配置是 service-product-test.yaml,那么公共配置就可以是 service-product.yaml。
    把公共的配置信息全部移動到 service-product.yaml 中,service-product-dev.yaml 或 service-product-test.yaml 只保留環境特定的配置項即可。

    5.2 不同微服務配置共享

    可以單獨提取一個公共配置,例如,dataId --> all-service.yaml ,然后在各個微服務的 bootstrap.yaml 中加入如下配置:

    spring:cloud:nacos:config:# ...其他配置...shared-dataids: all-service.yaml # 公共配置refreshable-dataids: all-service.yaml # 動態刷新的配置文件

    測試,以下幾個問題:

  • 通過shared-dataids引入的公共配置是否可以在不同的微服務之間生效?
  • 通過shared-dataids引入的公共配置是否可以做到相同微服務不同環境的切換?
  • 通過refreshable-dataids 表示的 dataId,是否可以在不使用 @RefreshScope 注解的情況下,直接刷新指定配置文件(不僅是公共也可能是私有配置)的配置項?
  • shared-dataids 和 refreshable-dataids 都是復數形式,如何配置多個 dataId?
  • 在 Nacos Config Server 上指定三個配置文件:all-service.yaml、service-product-dev.yaml 和 service-product-test.yaml。它們的配置信息如下:

    all-service.yaml

    server:port: 8081tomcat:max-threads: 5 spring:application:name: service-productdatasource:driver-class-name: com.mysql.jdbc.Driverurl: jdbc:mysql://localhost:3306/shop?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&rewriteBatchedStatements=trueusername: rootpassword: 123456cloud:nacos:discovery:server-addr: localhost:8848jpa:properties:hibernate:hbm2ddl:auto: update#InnoDB方言dialect: org.hibernate.dialect.MySQL5InnoDBDialect

    service-product-dev.yaml

    config:appName: productenv: dev

    service-product-test.yaml

    config:appName: productenv: test

    本地 bootstrap.yaml 配置:

    spring:application:name: service-productprofiles:active: devcloud:nacos:config:server-addr: localhost:8848file-extension: yaml # 配置格式(默認是 properties)shared-dataids: all-service.yaml # 公共配置refreshable-dataids: all-service.yaml # 動態刷新的配置文件

    測試代碼:

    @RestController @RequestMapping("/config") public class ConfigController {@Value("${config.appName}")private String appName;@Value("${config.env}")private String env;@GetMapping("/env")public String getConfig() {return env;} }

    啟動成功,說明可以獲取公共配置,且訪問測試接口,可以拿到配置信息:

    修改本地 bootstrap.yaml 配置信息:active=test,重新啟動,也可以拿到對應的test環境的配置信息:

    對于自動刷新問題

    對于 refreshable-dataids 配置,只針對公共配置有效。自動刷新的生效規則如下:

    環境配置
    必須使用 @RefreshScope 的方式動態生效,且不需要增加其他額外配置
    公共配置
    不僅要使用 @RefreshScope,還要增加 refreshable-dataids 令其支持自動刷新

    如果想引入多個共享配置,可以使用逗號分隔:

    spring:cloud:nacos:config:shared-dataids: 'all-service.yaml,common.yaml' # 公共配置refreshable-dataids: 'all-service.yaml,common.yaml' # 動態刷新的配置文件

    六、Nacos Config 的幾個概念

    1、命名空間(Namespace)
    命名空間可用于進行不同環境的配置隔離。一般一個環境劃分到一個命名空間。

    可以在 Nacos 上新建命名空間:

    若希望引用不同命名空間的配置,可以在 bootstrap.yaml 中加入 namespace: 命名空間ID :

    spring:cloud:nacos:config:namespace: 835f29bd-4cf8-4bd7-9ace-462a69643bd4

    2、配置分組(Group)
    配置分組可以將不同的服務歸類到同一個分組。一般以項目為單位,這個項目下的所有微服務的配置放到同一個組。

    3、配置集(Data ID)
    在系統中,一個配置文件通常就是一個配置集。一般微服務的配置就是一個配置集。

    總結

    如何使用Nacos 配置中心,只需要在項目本地引入 bootstrap.yaml 文件,并配置如下信息,就可以拉取 Nacos Config Server 上的遠程配置:

    spring:application:name: service-productprofiles:active: testcloud:nacos:config:server-addr: localhost:8848 # Nacos 地址file-extension: yaml # 配置格式(默認是 properties)

    關于共享配置,(經過實際測試)有以下幾點重要規則:

    1、同一微服務,公共配置項,可直接以 ${spring.application.name}.yaml 來命名 DataId,視為共享配置。
    1、在本地的 bootstrap.yaml 中使用 shared-dataids 和 refreshable-dataids 來指定共享配置
    2、多共享配置的格式(注意引號):shared-dataids: ‘all-service.yaml,common.yaml’
    3、refreshable-dataids 用于設置共享配置是否支持動態刷新,至于要不要動態刷新還需要使用 @RefreshScope 。也就是說,如果希望共享配置動態刷新,不僅要指定 refreshable-dataids,還需要配置 @RefreshScope。
    4、環境配置的動態刷新只受 @RefreshScope 影響,不需要額外指定 refreshable-dataids。
    5、配置重復問題。多個共享配置都包含重復的配置項,則以 bootstrap.yaml 中 shared-dataids 配置項靠后的共享配置為準。如兩個共享配置 all.yaml 和 common.yaml,都包含 appName 配置項,如果 shared-dataids=‘all.yaml,common.yaml’,則以 common.yaml 中的配置信息為準。
    共享配置和環境配置的配置項重復,以環境配置的配置項為準。

    總結

    以上是生活随笔為你收集整理的Spring Cloud Alibaba —— Nacos Config 配置中心的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。