1. 程式人生 > >對spring cloud config的一點理解

對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 [email protected]{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的上下文有高優先順序)。

相關推薦

spring cloud config一點理解

  以下部分純屬個人理解,但是結果都是經過demo驗證。 一、spring cloud config介紹   spring cloud是spring家族中的一個微服務工具包,其中包含了很多微服務的工具。偏向於與spring boot類似的配置方式,有許多許多預設配置。spring cloud config是其

Spring Cloud Config Server 節點遷移引起的問題,請格外注意這一點

前言: 雖然強烈推薦選擇使用國內開源的配置中心,如攜程開源的 Apollo 配置中心、阿里開源的 Nacos 註冊&配置中心。 但實際架構選型時,根據實際專案規模、業務複雜性等因素,有的專案還是會選擇 Spring Cloud Config,也是 Spring Cloud 官網推薦的。特別是對效能要求

Spring Cloud Config 入門

spring cloud config1. 簡介Spring Cloud Config 是用來為分布式系統中為微服務應用提供集中化的外部配置支持,主要分為Spring Cloud Config Server(服務器端)和Spring Cloud Config Client(客戶端)。2. Spri

Spring cloud config的使用技巧

cnblogs name java class div 如果 隊列 指定 con Spring cloud 的config server,可以很方便管理各個應用的配置。但我們在每個應用中,可能有大量重復的配置,比如都有相同的數據庫、消息隊列、redis等。如果放到每個應用的

跟我學習Spring Cloud Config - 快速開始

json con 遠程 cloud sin curl ces 資源 data- 啟動服務器: $ cd spring-cloud-config-server $ ../mvnw spring-boot:run 該服務器是一個Spring Boot應用程序,所以

Spring Cloud Config - 快速開始

springcloud spring cloud springcloud微服務 微服務雲架構 Spring Cloud Config為分布式系統中的外部配置提供服務器和客戶端支持。使用Config Server,您可以在所有環境中管理應用程序的外部屬性。客戶端和服務器上的概念映射與Spring

Spring Cloud Config - 客戶端使用

spring springcloud cloud 要在應用程序中使用這些功能,只需將其構建為依賴於spring-cloud-config-client的Spring引導應用程序(例如,查看配置客戶端或示例應用程序的測試用例)。添加依賴關系的最方便的方法是通過Spring Boot啟動器org.sp

Spring Cloud Config-快速開始

可選 啟動服務 itl ring 配置 dev pre b2c translate 啟動服務器: $ cd spring-cloud-config-server $ ../mvnw spring-boot:run 該服務器是一個Spring Boot應用程序,

spring-cloud-config-server

ring 程序 ron echo 二進制文件 https fig 默認 情況下 參考資料:   https://cloud.spring.io/spring-cloud-static/spring-cloud-config/1.4.0.RELEASE/single/spri

spring-cloud-config-server——Environment Repository

提供服務 實現 profile 默認 資料 文件的 pos sta 文件 參考資料:   https://cloud.spring.io/spring-cloud-static/spring-cloud-config/1.4.0.RELEASE/single/spring-

Spring Cloud Config客戶端使用

release 標準 client 簡單 app eas 一個 方便 rop 要在應用程序中使用這些功能,只需將其構建為依賴於spring-cloud-config-client的Spring引導應用程序(例如,查看配置客戶端或示例應用程序的測試用例)。添加依賴關系的最方便

Spring Cloud Config教程(四)快速開始

sof 應用 highlight 屬性 技術分享 添加 插入 標簽 yam Spring Cloud Config為分布式系統中的外部配置提供服務器和客戶端支持。使用Config Server,您可以在所有環境中管理應用程序的外部屬性。客戶端和服務器上的概念映射與Sprin

Spring Cloud Config教程(五)客戶端使用

home 本地 snap 遠程 html local nap parent path 要在應用程序中使用這些功能,只需將其構建為依賴於spring-cloud-config-client的Spring引導應用程序(例如,查看配置客戶端或示例應用程序的測試用例)。添加依賴關

幹貨分享微服務spring-cloud(7.配置中心spring-cloud-config

啟動 style 賬號 分享圖片 地址 config 分布式 efault 沒有 Spring Cloud Config為分布式系統中的外部配置提供服務器和客戶端支持。使用Config Server,您可以在所有環境中管理應用程序的外部屬性。客戶端和服務器上的概念映射與Sp

機器學習的一點理解

求導 分段 梯度下降法 部分 技術分享 直接 標註 sqrt 插件 ????機器是什麽,機器就是電腦、芯片、代碼這些東西。讓電腦遵循人的指令,完成一件特定的任務從計算機發明那天開始就在研究了,現在的各種編程語言、數據結構和編程算法等都是在做這個。但是它們只能依賴於程序員輸入

spring cloud config git配置的坑

spring boot不多說了,直接上列子pom.xml的 <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-clou

使用對稱加密來加密Spring Cloud Config配置文件

localhost host 配置文件 但是 prop pri 加密解密 PE pre 簡介 在真實項目環境下,我們不會在配置文件中明文存儲密碼等機密性文本,以防被竊。Spring Cloud Config提供了加密方法,以使明文文本加密成密文存儲在配置文件中。Spring

Spring Cloud Config - RSA簡介以及使用RSA加密配置文件

exp test bee 存在 publickey default label 單位 rom 簡介 RSA非對稱加密有著非常強大的安全性,HTTPS的SSL加密就是使用這種方法進行HTTPS請求加密傳輸的。因為RSA算法會涉及Private Key和Public Key分別

spring cloud 入門系列七:基於Git存儲的分布式配置中心--Spring Cloud Config

入門 代碼結構 dev eas TP scope ict AI 新項目 我們前面接觸到的spring cloud組件都是基於Netflix的組件進行實現的,這次我們來看下spring cloud 團隊自己創建的一個全新項目:Spring Cloud Config.它用來為分

Spring Cloud Config服務器

springboot springcloud springmvc eureka mybatis 服務器為外部配置(名稱值對或等效的YAML內容)提供了基於資源的HTTP。服務器可以使用@EnableConfigServer註釋輕松嵌入到Spring Boot應用程序中。所以這個應用程序是一