1. 程式人生 > >spring cloud實戰與思考(一) spring config全局配置方案設計

spring cloud實戰與思考(一) spring config全局配置方案設計

功能 IE 基於 比較 此外 fig eureka 搜索 地址

“spring cloud”的配置中心工具“spring cloud config”提供了分布式系統配置文件集中管理解決方案。該工具功能強大,實現也很簡單。網上可以搜索到很多開發教程和用例。本文並不是分享“spring cloud config”的開發方法,而是想聊一聊它的使用。

任何一個工具不管多麽強大和便利,如果用的不好,也達不到期望的效果。拿到“spring cloud config”後,我期望基於這個工具構建的配置文件管理系統能夠實現:

  1. 微服務中各個實例的配置項都集中在配置中心。運維人員無需逐一鏈接到各個分布式節點,能夠在配置中心完成微服務實例所有配置項的修改。
  2. 配置項信息源要單一。同一個配置項不會出現在兩個源中。以免兩個源中同一個配置項數值不一致,導致業務邏輯混亂。

通常在網上看到的“spring cloud config”實例中,“config client”的本地配置文件“bootstrap.properties”如下:

技術分享圖片

文件中微服務端口號8001”和實例名稱“booking-server”配置項其實是有可能改動的。例如增減微服務實例、端口號已占用、新增微服務類型等場景。所以將它們放到本地配置文件中無法滿足第一個需求。此外為了滿足第二個需求,需要將配置項按照使用範圍進行分類,分別放入不同的配置文件中:

1) 所有微服務實例共享的配置項,例如common.properties

2) 同類微服務實例共享的配置項,例如booking-common.properties

3) 特定微服務實例獨享的配置項,例如booking-server-a.properties、booking-server-b.properties

這就要求微服務實例能夠加載多個遠端的配置文件。而上面這種配置方式是使用微服務名稱“booking-server”映射到配置中心的“booking-server-dev.properties”配置文件。限制了加載的配置文件數量和名稱。無法滿足第二個需求。

現在以booking微服務dev版本為例,修改上面的配置文件:

  1. 微服務端口號“server.port”是實例獨享的配置項,將“server.port”放入“booking-server-a.properties
    ”配置文件中。
  2. 微服務名稱“spring.application.name”是booking類服務各個實例共享的配置項,將“spring.application.name”放入“booking-common.properties”配置文件中。
  3. 服務註冊中心地址配置項“eureka.client.serviceUrl.deaultZone”只能保留在本地配置文件中。
  4. 配置中心微服務名稱“spring.cloud.config.discovery.service-id”只能保留在本地配置文件中。
  5. 將微服務booking與其他微服務共享的配置項放入“common.properties”配置文件中。
  6. 使用“spring.cloud.config.name”配置項同時加載“common.properties”、“booking-common.properties”和“booking-server-a.properties”配置文件。

修改後的配置文件如下:

common-dev.properties配置文件:

技術分享圖片

booking-common-dev.properties配置文件:

技術分享圖片

booking-server-a-dev.properties配置文件:

技術分享圖片

"booking-server-a"本地“bootstrap.properties”配置文件:

技術分享圖片

現在“booking”微服務實例a的本地配置文件已經得到精簡,只保留了必要的配置項。這些配置項是必須的,用來指示“config client”如何找到“config server”以及應該加載那些配置文件。此外配置項“spring.cloud.config.name”和“spring.cloud.config.profile”配置項可以放到啟動微服務的命令行中。這樣可以編譯一個通用jar包,通過不同命令行參數啟動為不同的微服務實例。

再次精簡的本地“bootstrap.properties”配置文件:

技術分享圖片

啟動“booking”微服務a的命令:

java -jar .\booking-server.jar --spring.cloud.config.name=common,booking-common,booking-server-a --spring.cloud.config.profile=dev

本文講的東西是比較簡單的。主要是分享一下使用“spring cloud config”的一種思路。

spring cloud實戰與思考(一) spring config全局配置方案設計