老司機之路——Spring Cloud 配置中心的基本用法與配置中心叢集

脫毛程式猿發表於2018-01-31

1. Spring Cloud Config的服務端

1.1. 簡述

我們在開發大的系統時,由於服務較多,相同的配置(如資料庫資訊、快取、開關量等)會出現在不同的服務上,如果一個配置發生變化,則可能需要修改很多的服務配置。為了解決這個問題,spring cloud提供配置中心。

首先所有的公共配置儲存在相同的地址(儲存的地方可以是git,svn和本地檔案),然後配置中心從這些地方讀取配置以restful釋出出來,其它服務可以呼叫介面獲取配置資訊。

1.2. 配置服務

引入關鍵jar

<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-config-server</artifactId></dependency>1234複製程式碼

通過@EnableConfigServer可以啟用配置中心服務。配置中心可以單獨做服務,也可以嵌入到其它服務中。推薦用單獨做服務方式使用配置中心。

@SpringBootApplication@EnableConfigServer // 啟用該應用為配置檔案伺服器:讀取遠端配置檔案,轉換為rest介面服務public class CloudGitConfigServerApplication { public static void main(String[] args) { args = new String[1]; args[0] = "--spring.profiles.active=gitsimple2"; SpringApplication.run(CloudGitConfigServerApplication.class, args); }}12345678910複製程式碼

由於配置檔案的儲存的多樣性,下面介紹每種配置形式如何配置。所有的配置都配置在application-*.yml中

1.3. git後端

Spring Cloud配置中心的後端系統可以是:

  • VCS(如git,svn等)

  • 本地檔案

本節我們介紹git配置

配置引數主要配置中application-gitsimple2.yml

spring: application: name: special cloud: config: server: git: # 配置檔案只搜尋url目錄下的searchPaths uri: https://github.com/hryou0922/spring_cloud.git # 指定搜尋路徑,如果有多個路徑則使用,分隔 searchPaths: cloud-config-git/simple2/configspecial,cloud-config-git/simple2/default # 對於使用git,svn做為後端配置,從遠端庫獲取配置檔案,需要儲存到本地檔案 basedir: /tmp/spring-cloud-repo # 配置中心通過git從遠端git庫,有時本地的拷貝被汙染,這時配置中心無法從遠端庫更新本地配置,設定force-pull=true,則強制從遠端庫中更新本地庫 force-pull: true123456789101112131415複製程式碼

spring.cloud.config.server.git.url:指定配置檔案所在遠端git庫的url地址

spring.cloud.config.server.git.searchPaths:和上面的引數url配合使用,定位git庫的子目錄。指定搜尋路徑,如果有多個路徑則使用,分隔

spring.cloud.config.server.git.basedir:對於使用git,svn做為後端配置,從遠端庫獲取配置檔案,需要儲存到本地檔案。預設儲存在系統臨時目錄下,目錄名的字首為config-repo-,如在linux下時可能是/tmp/config-repo-。因為/tmp下的內容有可能被誤刪,所有為了保險,最好修改儲存目錄。如果你修改儲存目錄,你可以修改spring.cloud.config.server.git.basedir

spring.cloud.config.server.git.force-pull:配置中心通過git從遠端git庫讀取資料時,有時本地的拷貝被汙染,這時配置中心無法從遠端庫更新本地配置。設定force-pull=true,則強制從遠端庫中更新本地庫

以上是一些常用的配置,其它配置可以自己看配置類MultipleJGitEnvironmentRepository類

1.4. svn後端

svn的配置方法和git差不多,主要使用”spring.cloud.config.server.svn.*”。這裡略

1.5. 檔案系統後端

除了使用從git/svn下載配置檔案,你可以從classpath目錄或本地檔案系統中載入配置檔案。通過spring.cloud.config.server.native.searchLocations配置地址.這裡又分為兩類:

  • 從本地目錄載入配置檔案:以file開頭

  • file:///${user.home}/config-repo

    預設值:file:./, file:./config

  • 從classpath中載入配置檔案:以classpath開頭

  • 如果不配置值,則預設值:classpath:/, classpath:/config

以classpath為例,file的用法和classpath用法相同,這裡略.

spring: profiles: # native:啟動從本地讀取配置檔案,必須指定active的值,才可以使用本地檔案配置模式 active: native # 自定義配置檔案路徑 cloud: config: server: native: searchLocations: classpath:/config/simple2/12345678910複製程式碼

spring.profiles.active: 如果使用本地系統配置,則此值必須是native

spring.cloud.config.server.native.searchLocations: 指定配置檔案的路徑

1.6. 啟動和測試

通過CloudGitConfigServerApplication就可以啟動服務

在瀏覽器中輸入如下URL,可以訪問到配置檔案

/{application}/{profile}[/{label}]/{application}-{profile}.yml/{label}/{application}-{profile}.yml/{application}-{profile}.properties/{label}/{application}-{profile}.properties12345複製程式碼

下面通過具體例子說明以上url的意思。如果我們的配置檔名稱cloud-config-simple2.yml,則其和URL中各個欄位對應的值為:

  • application: cloud-config

  • profile: simple2

  • label: 9500e50f08c43e3e4391175c8f6d5a326b11302f

我們訪問以下地址都可以訪問到配置檔案config-simple2.yml和特定版本下此檔案:

http://127.0.0.1:10888/cloud-config/simple2

http://127.0.0.1:10888/cloud-config/simple2/9500e50f08c43e3e4391175c8f6d5a326b11302f

http://127.0.0.1:10888/cloud-config-simple2.yml

http://127.0.0.1:10888/9500e50f08c43e3e4391175c8f6d5a326b11302f/cloud-config-simple2.yml

http://127.0.0.1:10888/cloud-config-simple2.properties

http://127.0.0.1:10888/9500e50f08c43e3e4391175c8f6d5a326b11302f/cloud-config-simple2.properties

2. Spring Cloud Config的客戶端

配置中心服務端配置成功後,然後其它服務從配置中心獲取配置檔案,這樣的服務被稱為客戶端。

2.1. 配置客戶端

引入jar:

<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-config-client</artifactId></dependency>1234複製程式碼

只要是@SpringBootApplication註解啟動的spring boot即可

@SpringBootApplicationpublic class SimpleCloudServiceApplication { public static void main(String[] args) { args = new String[1]; args[0] = "--spring.profiles.active=simple2"; SpringApplication.run(SimpleCloudServiceApplication.class, args); }}123456789複製程式碼

2.2. 配置引數

請將配置中心的相關配置配置在bootstrap-.yml中,不要配置appliaction-.yml。因為服務啟動時,會從bootstrap中讀取配置,然後從遠端配置中心讀取配置檔案,最後再從appliaction中獲取配置,如果有相同的配置項,則後面的會覆蓋前面讀到的值。所以如果配置中心的配置配置在appliaction,則配置項不會有任何效果。

bootstrap-simple2.yml

spring: cloud: # 配置伺服器的地址 config: uri: http://127.0.0.1:10888 # 要讀取配置檔案讀取的值 name: cloud-config # 如果不設定此值,則系統設定此值為 spring.profiles.active profile: dev # 可以使用之前的版本。預設值可以是git label, branch name or commit id。可以使用多個Label,多個Label可以使用逗號分隔 # label: # true: 如果訪問配置中心失敗,則停止啟動服務 fail-fast: true # 配置重試,預設是重試6次,最初是延遲1s再次重試,如果再失敗,則延遲1.1*1s、1.1*1.1*1s、… 。可以使用這個配置 retry: initial-interval: 2000 # 最多重試次數 max-attempts: 6 # 最大重試間隔 max-interval: 4000 # 每次重試時間是之前的倍數 multiplier: 1.212345678910111213141516171819202122複製程式碼

重要引數的解釋如下:

配置中心的url

即從哪裡讀取配置檔案,通過“spring.cloud.config.url”配置

要讀取哪些配置檔案

由以下引數共同決定,和”2.6. 啟動和測試”結合看加深理解。

- “spring.cloud.config.name”:配置檔名稱,對應上文的讀取URL中的{applicaion}值

- “spring.cloud.config.profile”:配置檔案的profile,對應上文的URL中的{profile}值

- “spring.cloud.config.label”: 可以使用之前的版本。預設值可以是git label, branch name or commit id。可以使用多個Label,多個Label可以使用逗號分隔

快速失敗

如果要求客戶端訪問配置中心失敗,則立即停止啟動服務,則設定“spring.cloud.config.label”為 true

重試

如果訪問配置失敗,則自動重試。預設是重試6次,最初是延遲1s再次重試,如果再失敗,則延遲1.1*1s、1.1*1.1*1s、… 。通過下面引數可以修改值:

  • “spring.cloud.config.retry.initial-interval”:第一次失敗,延遲多久重試

  • “spring.cloud.config.retry.max-attempts”:最多重試次數

  • “spring.cloud.config.retry.max-interval”: 最大重試間隔

  • “spring.cloud.config.retry.multiplier”: 每次重試時間是之前的倍數

    如果要實現重試功能,需要引入新的jar

<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-aop --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId> </dependency> <!-- https://mvnrepository.com/artifact/org.springframework.retry/spring-retry --> <dependency> <groupId>org.springframework.retry</groupId> <artifactId>spring-retry</artifactId> </dependency>12345678910複製程式碼

2.3. 啟動和測試


具有1-5工作經驗的,面對目前流行的技術不知從何下手,需要突破技術瓶頸的可以加群。在公司待久了,過得很安逸,但跳槽時面試碰壁。需要在短時間內進修、跳槽拿高薪的可以加群。如果沒有工作經驗,但基礎非常紮實,對java工作機制,常用設計思想,常用java開發框架掌握熟練的可以加群。java架構群:591240817 一起交流。

啟動SimpleCloudServiceApplication,在瀏覽器輸入http://127.0.0.1:10082/simple,會返回以下資訊,則表示成功

{"age":112,"name":"git2-default-dev","randomNum":53}複製程式碼

2. 配置中心叢集和使用

1.1. 配置中心叢集

配置中心叢集主要通過將配置服務註冊成服務來達到叢集的目地。

配置中心工程: cloud-config-center

配置中心的其它配置見上篇文章內容,這裡只介紹註冊成服務的部分

  • @EnableEurekaClient:通過本註解將配置中心註冊到配置中心

@SpringBootApplication@EnableConfigServer // 啟用該應用為配置檔案伺服器:讀取遠端配置檔案,轉換為rest介面服務@EnableEurekaClient // 配置本應用將使用服務註冊和服務發現public class CloudGitConfigServerApplication { public static void main(String[] args) { args = new String[1]; args[0] = "--spring.profiles.active=gitsimple2"; SpringApplication.run(CloudGitConfigServerApplication.class, args); }}1234567891011複製程式碼

application-gitsimple2.yml:部分相關配置內容如下

  • spring.application.name:配置服務的服務名稱

spring: application: name: config-config-gitsimple2123複製程式碼

1.2. 客戶端訪問配置中心叢集

工程名稱:cloud-service

bootstrap-simple2.yml:部分相關配置內容如下

  • 註釋掉’spring.cloud.config.uri’的配置,增加兩個新的配置值:

  • spring.cloud.config.discovery.enabled:如果設定為true,則表示通過註冊中心獲取配置服務中心地址

  • spring.cloud.config.discovery.service-id:配置中心的服務註冊名稱,即配置中心工程cloud-config-center的application.yml中spring.application.name的值

spring: cloud: # 配置伺服器的地址 config: # uri: http://127.0.0.1:10888 # 通過註冊服務 discovery: enabled: true service-id: config-config-gitsimple2 # 要讀取配置檔案讀取的值 name: cloud-config # 如果不設定此值,則系統設定此值為 spring.profiles.active profile: dev12345678910111213複製程式碼

1.3. 測試

依次啟動工程:

cloud-registration-center、 cloud-config-center、cloud-service

檢視當前的註冊到配置中的資訊

http://127.0.0.1:10761/

老司機之路——Spring Cloud 配置中心的基本用法與配置中心叢集

訪問url: http://127.0.0.1:10082/simple,返回內容:

{"age":112,"name":"git2-default-dev","randomNum":73}1複製程式碼

說明我們的配置已經生效了

老司機之路——Spring Cloud 配置中心的基本用法與配置中心叢集



相關文章