Spring Cloud系列(六) 配置中心

2022-02-04 14:59:30 字數 3429 閱讀 3603

本篇要介紹的配置中心就是要把所有微服務需要使用的配置值放在同乙個地方統一管理,可以分為不同的版本,不同的環境,當要修改某個配置值時,不管是哪個服務,都可以在同乙個地方做出修改。

spring cloud配置中心的架構大致如下:

repo可以是本地,可以是git倉庫,可以是svn倉庫,配置中心分為服務端和客戶端,服務端從倉庫中讀取配置,客戶端從服務端請求配置。

但是這種方法有兩個問題,一是服務端只有乙個,出問題了那麼所有的客戶端都用不了;二是假如服務端的位址變了,客戶端還要跟著變,比較麻煩。在本系列一開始,我們就介紹了註冊中心,這個時候,我們就可以把配置中心的服務端和客戶端都註冊到註冊中心,在構架服務端的集群的時候,只需要直接新增多個節點就可以了,而客戶端不再是直接去服務端請求配置,而是向註冊中心請求。架構如下:

先在github或者別的git倉庫(比如碼雲、私服等)建立乙個倉庫config-repo,然後在倉庫建立乙個目錄config-client,接著在目錄下建立乙個client-config-dev.properties檔案,在檔案中新增foo=bar,下面的步驟我們會從這個檔案中讀取foo的值。如果是把倉庫clone到本地再做修改的話,記得把內容push到github。

仍然在之前的專案上新增新的功能。新建乙個module,名稱為config-server,新增eureka discovery client和config server兩個依賴,如下

org.springframework.cloud

spring-cloud-config-server

org.springframework.cloud

spring-cloud-starter-netflix-eureka-client

在啟動類加上@enableeurekaclient和@enableconfigserver註解

spring.cloud.config.server.git.uri屬性指定的就是git倉庫的位址,spring.cloud.config.server.git.search-paths屬性是該倉庫下的相對路徑,這個可以方便我們對不同的微服務做配置檔案隔離管理,如果倉庫是public的,username和password不用填,private的需要。

啟動註冊中心和config-server,訪問http://localhost:8000/client-config-dev.properties,返回了

foo: bar
說明config-server確實是載入了遠端倉庫的配置檔案。事實上,config-server已經把配置檔案的內容轉換為web的形式了:

因此我們也可以通過訪問http://localhost:8000/client-confi/dev來獲取配置的值。

這時候我們在倉庫的client-config-dev.properties中新增乙個配置(如果是在本地倉庫新增記得push到github)

foo1=bar1
不要重啟,再次訪問http://localhost:8000/client-config-dev.properties,結果返回

foo: bar

foo1: bar1

說明config-server會自動讀取最新的內容。

本來可以在之前消費者或者提供者服務上新增配置中心客戶端的功能的,但是這裡不準備這麼做了,我們新建乙個module,名稱為config-client,選擇spring web、eureka discovery client和config client三個依賴,如下

org.springframework.boot

spring-boot-starter-web

org.springframework.cloud

spring-cloud-starter-config

org.springframework.cloud

spring-cloud-starter-netflix-eureka-client

在啟動類新增@enableeurekaclient註解開啟註冊發現

server.port=8001
另外在resources目錄下新建乙個bootstrap.properties,加入以下配置

解釋一下這幾個配置的含義:

spring.cloud.config.profile:執行環境

spring.cloud.config.label:倉庫分支

spring.cloud.config.discovery.enabled:開啟config服務發現

為了方便測試新建乙個controller如下

@restcontroller

public class configclientcontroller ")

private string foo;

public string getfoo()

}

啟動config-client,訪問http://localhost:8001/getfoo

原始碼已經上傳到github:

SpringCloud系列(六)ZUUL服務閘道器

zuul 路由 router zuul 過濾器 filter 服務閘道器是微服務架構中乙個不可或缺的部分。通過服務閘道器統一向外系統提供rest api的過程中,除了具備服務路由 均衡負載功能之外,它還具備了許可權控制 鑑權 等功能。spring cloud netflix中的zuul就擔任了這樣的...

Consul作為SpringCloud配置中心

在分布式系統中動態配置中,可以避免重複重啟服務,動態更改服務引數等。一句話非常重要。另外一篇文章也是這樣說的,哈哈。consul 作為spring 推薦的分布式排程系統其也具備配置中心的功能,我們也可以利用其作為配置中心,其client端主動定時發起與配置中心同步機制,實現動態配置的的更新。環境依賴...

springcloud系列六 整合security

eureka自帶了乙個管理介面,如果不加密,所有人都可以進行訪問這個位址,這樣安全問題就來了,所以需要對其進行加密認證 那麼該如何進行整合呢 1 在註冊中心模組新增依賴 org.springframework.boot spring boot starter security 2 yml檔案配置 s...