最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Nacos配置中心搭建及動態(tài)刷新配置及踩坑記錄

 更新時間:2022年11月23日 09:30:51   作者:弱水提滄  
這篇文章主要介紹了Nacos配置中心搭建及動態(tài)刷新配置及踩坑記錄,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

近期有用到阿里的開源配置中心及注冊中心nacos,特此記錄并分享一些學(xué)習(xí)筆記及配置踩坑點。

一、Nacos配置中心介紹

從架構(gòu)圖上可以知道,Nacos提供了兩種服務(wù),一種是用于服務(wù)注冊、發(fā)現(xiàn)的Naming Service,一種是用于配置中心、動態(tài)配置的Config Service,而他們底層均由core模塊來支持。

外層提供OpenAPI供客戶端使用,并提供了User Console、Admin Console方便用戶使用 。

用戶通過管理平臺發(fā)布配置,通過HTTP調(diào)用將配置注冊到服務(wù)端,服務(wù)端將之保存在MySQL等持久化存儲引擎中;用戶通過客戶端SDK訪問服務(wù)端的配置,同時建立HTTP的長輪詢監(jiān)聽配置項變更,同時為了減輕服務(wù)端壓力和保證容災(zāi)特性,配置項拉取到客戶端之后會保存一份快照在本地文件中,SDK優(yōu)先讀取本地文件里的配置。

當(dāng)服務(wù)端的配置發(fā)生變更時,客戶端會通過監(jiān)聽機制,拿到變更后的最新配置信息。

簡單來說,Nacos 客戶端是怎么實時獲取到 Nacos 服務(wù)端的最新數(shù)據(jù)的:

Nacos 并不是通過推的方式將服務(wù)端最新的配置信息發(fā)送給客戶端的,而是客戶端維護了一個長輪詢的任務(wù),定時去拉取發(fā)生變更的配置信息,然后將最新的數(shù)據(jù)推送給 Listener 的持有者。

二、配置中心搭建

1.配置中心啟用

首先需要到官網(wǎng)上下載nacos-server,然后將服務(wù)跑起來之后。

根據(jù)自己的需要,建立幾個命名空間,當(dāng)然使用默認(rèn)的public的命名空間也是可以的,如圖所示。

2.創(chuàng)建配置文件

在配置列表中創(chuàng)建配置文件,其中配置文件命名方式需要注意。

在Nacos-Server中新建配置,其中Data ID它的定義規(guī)則是:${prefix}-${spring.profiles.active}.${file-extension}

  • prefix 默認(rèn)為 spring.application.name 的值,也可以通過配置項 spring.cloud.nacos.config.prefix 來配置。
  • spring.profiles.active 即為當(dāng)前環(huán)境對應(yīng)的 profile,可以通過配置項 spring.profiles.active 來配置。
  • file-exetension 為配置內(nèi)容的數(shù)據(jù)格式,可以通過配置項 spring.cloud.nacos.config.file-extension 來配置。目前只支持 properties 和 yaml 類型。

注意:當(dāng) spring.profiles.active 為空時,對應(yīng)的連接符 - 也將不存在,dataId 的拼接格式變成 prefix.{prefix}.prefix.{file-extension}

在本文中,我的項目名稱為vaso-core,配置文件使用的是dev環(huán)境,因此我的配置文件如下:

其中的文件內(nèi)容就是正常的yaml格式的內(nèi)容填寫就行,這邊就不具體展示了。

3.工程配置

首先我們需要導(dǎo)入nacos-config的依賴(注:我這邊沒有使用nacos的注冊發(fā)現(xiàn),依舊沿用自身使用的eureka)。

其中依賴版本的對應(yīng)關(guān)系可以在官網(wǎng)中查找。

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

其次我們需要在配置文件中進行配置,采用bootstrap.yml文件進行配置,因為springboot會優(yōu)先啟動bootstrap.yml文件中的配置。其中文件內(nèi)容如下:

bootstrasp.yml:

spring:
  application:
    name: vaso-core
    cloud:
    nacos:
#      discovery:
#        server-addr: xx.xx.xxx.xx:8848
#        namespace: 8b387ec4-e60d-4878-baf4-f2246e58a1d6
      config:
        server-addr: xx.xx.xxx.xx:8848
        file-extension: yml
        namespace: 8b387ec4-e60d-4878-baf4-f2246e58a1d6
  profiles:
    active: dev

namespace的內(nèi)容為上文中配置的dev命名空間的id。

最后我們需要引入@refreshscope關(guān)鍵字,保證可以實時刷新配置。在controller層或者要刷新的值所在的類上進行注釋就行。

其中我們的demo是如下所示:

三、試驗結(jié)果

將工程跑起來,可以看到一開始就已經(jīng)去配置中心讀取配置了,如圖:

此時將配置中心內(nèi)容修改,可以看到已經(jīng)實時刷新了配置。

四、踩坑經(jīng)歷

其實在正式使用之前也碰到過nacos無法試試實時刷新的問題,打斷點卻發(fā)現(xiàn)實際已經(jīng)讀取到本地,通過進入spring的源碼中查看,也發(fā)現(xiàn)其實已經(jīng)可以拿到配置了,但是卻一直無法刷新配置。

最后通過一個禮拜的定位源碼,斷點查詢才發(fā)現(xiàn)一個本質(zhì)性的問題。欲哭無淚

@RefreshScope與數(shù)據(jù)源之間存在沖突??!

具體如下:

  • 因為項目是多數(shù)據(jù)源,所以使用的是自定義數(shù)據(jù)源配置的DataSource,用@Bean注入。
  • 在SpringBoot 2.0以上默認(rèn)使用Hikari連接池,一旦連接池啟動,就無法再修改HikariDataSource,所以刷新配置時連帶數(shù)據(jù)源一起刷新,于是會報錯。

Caused by: java.lang.IllegalStateException: The configuration of the pool is sealed once started. Use HikariConfigMXBean for runtime changes.

解決方法: 在自定義的DataSource上加入注解@RefreshScope,或者使用spring.scloud.refresh.extra-refreshable配置指定classname列表即可。

查看Hikari的默認(rèn)配置即可發(fā)現(xiàn),這個與刷新配置之間是存在沖突的。

因此在數(shù)據(jù)源配置類中加入注釋,這樣每次刷新配置的時候會重新刷新這個Bean,那么就可以保證不會報錯,這樣的spring的刷新機制就可以順利執(zhí)行下去了。

五、總結(jié)

通過這次經(jīng)歷,我發(fā)現(xiàn)定位問題的過程是一門極高的學(xué)問,學(xué)會怎么去看源碼,懂原理才能更好的更精準(zhǔn)的分析問題所在之處。

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • SpringBoot使用MapStruct生成映射代碼的示例詳解

    SpringBoot使用MapStruct生成映射代碼的示例詳解

    MapStruct 是一個用于 Java 的代碼生成器,專門用于生成類型安全的 bean 映射代碼,它通過注解處理器在編譯時生成映射代碼,從而避免了運行時的性能開銷和潛在的錯誤,本文給大家介紹了SpringBoot使用MapStruct生成映射代碼的示例,需要的朋友可以參考下
    2024-11-11
  • java.nio.file.WatchService?實時監(jiān)控文件變化的示例代碼

    java.nio.file.WatchService?實時監(jiān)控文件變化的示例代碼

    在?Java?語言中,從?JDK7?開始,新增了java.nio.file.WatchService類,用來實時監(jiān)控文件的變化,這篇文章主要介紹了java.nio.file.WatchService?實時監(jiān)控文件變化,需要的朋友可以參考下
    2022-05-05
  • Java的Struts框架中<results>標(biāo)簽的使用方法

    Java的Struts框架中<results>標(biāo)簽的使用方法

    這篇文章主要介紹了Java的Struts框架中<results>標(biāo)簽的使用方法,Struts框架是Java的SSH三大web開發(fā)框架之一,需要的朋友可以參考下
    2015-11-11
  • 使用springmvc配置視圖解析器和重定向方式

    使用springmvc配置視圖解析器和重定向方式

    這篇文章主要介紹了使用springmvc配置視圖解析器和重定向方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • eclipse創(chuàng)建java項目并運行的詳細(xì)教程講解

    eclipse創(chuàng)建java項目并運行的詳細(xì)教程講解

    eclipse是java開發(fā)的ide工具,是大部分java開發(fā)人員的首選開發(fā)工具,可是對于一些新Java人員來說,不清楚eclipse怎么運行項目?這篇文章主要給大家介紹了關(guān)于eclipse創(chuàng)建java項目并運行的相關(guān)資料,需要的朋友可以參考下
    2023-04-04
  • springboot 整合郵件發(fā)送功能

    springboot 整合郵件發(fā)送功能

    這篇文章主要介紹了springboot 整合郵件發(fā)送功能,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-12-12
  • 淺析Java中JNI靜態(tài)注冊和動態(tài)注冊

    淺析Java中JNI靜態(tài)注冊和動態(tài)注冊

    這篇文章主要為大家詳細(xì)介紹了Java中JNI靜態(tài)注冊和動態(tài)注冊的相關(guān)知識,文中的示例代碼簡潔易懂,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-12-12
  • SpringBoot?LiteFlow引擎框架使用原理解析

    SpringBoot?LiteFlow引擎框架使用原理解析

    LiteFlow是一個輕量且強大的國產(chǎn)規(guī)則引擎框架,可用于復(fù)雜的組件化業(yè)務(wù)的編排領(lǐng)域,本文給大家介紹SpringBoot?LiteFlow引擎框架的相關(guān)操作,感興趣的朋友跟隨小編一起看看吧
    2024-03-03
  • Spring?Boot如何通過Actuator顯示git和build的信息

    Spring?Boot如何通過Actuator顯示git和build的信息

    這篇文章主要介紹了Spring?Boot通過Actuator顯示git和build的信息,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-01-01
  • java synchronized用法詳解

    java synchronized用法詳解

    本篇文章主要介紹了java synchronized用法詳解,synchronized是Java中的關(guān)鍵字,是一種同步鎖。有興趣的同學(xué)可以了解一下。
    2016-11-11

最新評論

高要市| 得荣县| 连城县| 革吉县| 文成县| 定远县| 揭东县| 永川市| 阿合奇县| 静海县| 河南省| 固原市| 卓资县| 兴隆县| 喀什市| 庆安县| 金平| 巴青县| 新竹县| 尚义县| 莎车县| 泌阳县| 项城市| 惠来县| 新绛县| 康定县| 汤原县| 平谷区| 东方市| 桓台县| 体育| 新乡县| 永吉县| 昭平县| 新竹市| 吉水县| 武定县| 丹巴县| 日喀则市| 大同县| 嘉兴市|