config的作用
config是分布式配置中心,用來集中管理微服務的配置檔案,一般情況下,應用的配置檔案是放在專案中的,修改了之後需要重新啟動,但是在微服務架構中,雖然應用的配置檔案不如mvc那麼多,但是隨著服務數量的增加,每個服務都有自己的配置檔案,按照一般的方法需要逐個修改重啟,相當麻煩,通過config可以將這些配置檔案統一管理起來,並且可以動態重新整理配置,不需要重啟。
注意,config雖然是可以管理配置檔案,但是服務應用中還是需要有最低限度的配置的,例如服務的命名,指定註冊中心等配置是至少要有的,否則服務根本起不來,一般來說只需要將相對靈活的部分配置放在config中進行管理即可。
config的原理
config作為配置中心必然存在乙個存放配置的地方,在config中是使用版本控制器進行存放的,也就是git或svn,這裡以git為例,config本身是沒有後台介面可以操作的,要修改配置就只能通過git或者svn的視覺化軟體或者命令來操作。
config裡面分為服務端和客戶端,服務端負責從git中拉取配置檔案,客戶端再從服務端中獲取,一般來說客戶端不直接從git上面拉取配置,因為客戶端是會有多個的,服務端只需要乙個即可,而且每次都從git上面拉取的話速度也比較慢,獲取配置的流程如下:
1.服務端從git拉取最新的配置檔案,快取到本地
2.客戶端從服務端中請求需要的配置檔案,快取到本地
3.如果使用了監視器重新整理(下面提到),可以通過手動重新整理,重新整理實際上是重構對應的bean,否則需要重啟服務
這裡要注意的是雖然服務端和客戶端在獲取配置檔案之後都會放入快取,但實際上每次訪問服務端上的配置檔案時都是最新的,會跟git進行同步,但是客戶端放入快取之後是不會自動重新整理的,所以git上面修改了配置是不會在客戶端中生效的。
config服務端
服務端主要負責與git同步,搭建有幾步:
1.新增依賴,服務端也是乙個服務
org.springframework.cloud
spring-cloud-config-server
org.springframework.cloud
spring-cloud-starter-netflix-eureka-client
spring:
#配置讀取的git位址
cloud:
config:
server:
git:
###git環境位址
uri:
#username: 使用者名稱
#password: 密碼
####搜尋目錄,多個的話用逗號分割
search-paths:
demo-zuul
####讀取分支
label: master
3.啟動類,@enableconfigserver開啟config服務端功能
@enableeurekaclient
@enableconfigserver
public static void main(string args)}
配置好了之後可以直接訪問到git上面的配置,直接輸入ip+埠+配置檔案+顯示格式(localhost+8085+eureka-zuul-dev+.yml)就可以看到配置的內容,這就代表服務端搭建成功.
這裡有乙個小小的坑,就是配置檔案的命名請務必遵循 「客戶端服務名-環境」 的格式命名,否則可能會訪問不到,例如這裡的客戶端是eureka-zuul,環境是dev環境,配置檔案命名就是eureka-zuul-dev。
config客戶端
客戶端其實就是其他普通的服務,只是在原有基礎上加上客戶端功能而已,
1.新增客戶端依賴
org.springframework.cloud
spring-cloud-config-client
org.springframework.boot
spring-boot-starter-actuator
#zuul路由通過config配置
spring:
#配置config伺服器
cloud:
config:
####讀取字尾
profile: dev
####讀取config-server註冊位址
discovery:
service-id: config-server
enabled: true
#開啟監控斷點
management:
endpoints:
web:
exposure:
include: "*"
3.以zuul為例,啟動類中加上配置資訊,@refreshscope表示開啟重新整理功能,@configurationproperties可以將相關的配置資訊封裝在類裡面
@refreshscope
@configurationproperties("zuul")
public zuulproperties zuulproperties()
利用bus訊息匯流排動態重新整理1.伺服器端加上bus依賴
org.springframework.cloud
spring-cloud-starter-bus-amqp
2.伺服器端配置rabbitmq伺服器資訊
#設定rabbitmq位址
spring:
rabbitmq:
host: localhost
port: 5672
username: guest
password: guest
#開啟監控斷點
management:
endpoints:
web:
exposure:
include: "*"
3.客戶端加上bus依賴,跟第一步是一樣的
4.客戶端配置rabbitmq伺服器資訊
#設定rabbitmq位址
spring:
rabbitmq:
host: localhost
port: 5672
5.git更新後通過以post請求方式呼叫/actuator/bus-refresh介面進行更新,注意這裡呼叫的是服務端的,跟不是客戶端,服務端會通過所有訂閱了的客戶端進行更 分布式之配置中心config
一 配置中心服務端 依賴 org.springframework.cloudgroupid spring cloud config serverartifactid dependency 新建乙個配置中心專案,啟動類加註解 enableconfigserver enableconfigserver ...
Config分布式配置中心介紹
微服務意味著要將單體應用中的業務拆分成乙個個子服務,每個服務的粒度相對較小,因此系統中會出現大量的服務。由於每個服務都需要必要的配置資訊才能執行,所以一套集中式的 動態的配置管理設施是必不可少的。springcloud config為微服務架構中的微服務提供集中化的外部配置支援,配置伺服器為各個不同...
分布式配置中心
部署演進 單機配置檔案部署 當隨著業務的使用者量增加,通常我們會把我們的服務進行多機器 集群 部署。這時候,配置的發布就變成了如下,多機器配置 1.2 分配式配中心 傳統配置的方式已經暴露出了很多問題,其餘的諸如 歷史版本管理,許可權控制,安全性等等問題,是傳統的配置檔案無法處理的 隨著業務的發展 ...