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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

对spring cloud config的一点理解

發布時間:2025/4/9 编程问答 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 对spring cloud config的一点理解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

  以下部分純屬個人理解,但是結果都是經過demo驗證。

一、spring cloud config介紹

  spring cloud是spring家族中的一個微服務工具包,其中包含了很多微服務的工具。偏向于與spring boot類似的配置方式,有許多許多默認配置。spring cloud config是其中的一個工具包,用于配置的拉取更新。

  舉一個小小的例子,當我們程序中有一個配置文件需要修改,但是服務已經啟動,配置文件中的配置已經讀取到內存中,為了修改配置,我們需要重啟服務;如果是一臺或者幾臺機器重啟,還算容易,但是如果是一個集群,重啟就變成一個非常耗時的工作;如果我們使用spring cloud config,就可以在服務運行時,拉取git(svn等,下面以git為例)的配置,修改內存中的配置。

二、spring cloud config邏輯介紹

  config-server:提供對git的連接,配置拉取,這里的拉取是被動拉取。

  config-client:連接config-server,通過URI請求對應的配置文件,獲取配置屬性

  如圖表示client從server拉取配置的過程:

  

  1、client根據配置向server發送配置請求

  2、server根據配置從git拉取所有文件(git clone的過程)

  3、git將整個倉庫下發

  4、server解析client的URI請求,返回相應的配置屬性或者錯誤信息(不存在相應的配置屬性)

  如圖表示client發送刷新配置請求的過程:

  1、client向server發送refresh請求

  2、server向從git更新本地配置(git pull)

  3、git下發更新

  4、server對比更新,發現client需要的配置有更新時,會將更新信息發給client

理解:1、在client第一次向server發送URI請求時,server會根據配置的git地址,拉取對應倉庫的所有文件(與git clone@{git adress})(在config-server本地/tmp目錄下可以找到git本地倉庫);

   2、值得注意的是,在client發送刷新配置請求(refresh)時,server會根據本地倉庫的情況處理:

     (1)如果server本地倉庫有未提交的commit和未commit的修改時,server就不會從git上拉取更新(不會git pull),只會將本地倉庫中對應的配置屬性傳給client;

     (2)如果server本地倉庫沒有任何修改和commit,server會從git上拉取更新(git pull),然后將本地倉庫對應的配置屬性傳給client。

   3、還有一個坑點,我在demo測試過程中發現,如果git倉庫過大,拉取過程很長,在server拉取的時候會出錯(有一個最大等待時長,超過會出現超時錯誤)。為了實現大的二進制文件的正常拉取,可以切到本地倉庫地址,手動拉取一次更新。

     (1)在創建本地倉庫時就采用手動拉取的方式:在配置文件application.properties中,設置git的url地址為本地文件地址,初始化時,手動git clone遠程倉庫地址到設置的本地文件地址。在更新配置的時候,config-server也會自動從遠程拉取更新。

     (2)如果是更新的時候有大文件的修改導致不能拉取更新:application.properties配置文件中git的url為遠程倉庫地址,初始化時能夠自動拉取,如果有大文件更新,利用git工具,手動切到本地/tmp目錄下,利用git命令手動拉取更新就可以拉取大文件的更新,在之后的小文件更新中,config-server就能夠正常自動更新。

總之就是,client向server發送一個URI請求:“我要**屬性,你那里有嗎?”,然后server根據自身的配置,拉取git倉庫,然后去找client需要的那個屬性,然后告訴client:“我這里有(沒有)這個屬性,(有就給client)”;刷新過程就是,client向server發送一個URI請求:“我請求的屬性值變了嗎?”,然后server處理之后,回復client:“變了,這是新的值。(沒變)”。

三、配置文件介紹

1、client配置文件如下:

spring.application.name = test 1 spring.cloud.config.lable = master 2 spring.cloud.config.profile = dev 3 spring.cloud.config.uri = http://localhost:8881/    4

解釋:1和3組成了訪問的配置文件名,如test-dev.properties

   2決定了git的分支,此處為master分支

   4表示config-server的地址

請求的URI就是由這個配置決定的,網上關于這點的說明很多,此處不再贅述

2、server配置文件如下:

spring.cloud.config.server.git.uri = https://github.com/lucknot/songxh_scse/    1 spring.cloud.config.server.git.searchPaths = test                    2

解釋:1表示git倉庫的地址,這里是我的github倉庫地址(并沒有干貨)

   2表示配置搜索的文件夾,在client請求配置時,只會在這個文件夾下進行搜索

事實上將1和2拼接在一起就組成了搜索配置屬性的URL地址。

?

針對配置文件需要說明以下,label表示的分支只與client的配置相關:client中配置的是哪個分支就取哪個分支的配置

ps:在寫這篇博客的時候突然想到一個問題,client在像server請求時是否只是請求需要的屬性的值,還是請求對應的屬性文件。個人感覺是取對應文件名的配置文件,在client拿到配置文件后再將讀取對應的屬性,與spring boot中從配置文件中讀取屬性類似(事實上就是兩個上下文,spring cloud的上下文有高優先級)。

?

轉載于:https://www.cnblogs.com/songxh-scse/p/7406641.html

總結

以上是生活随笔為你收集整理的对spring cloud config的一点理解的全部內容,希望文章能夠幫你解決所遇到的問題。

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