微服務實戰——高可用的SpringCloudConfig

管理微服務配置

對於單體應用架構來講,會使用配置文件管理咱們的配置,這就是以前項目中的application.properties或application.yml。若是須要在多環境下使用,傳統的作法是複製這些文件命名爲application-xxx.properties,而且在啓動時配置spring.profiles.active={profile}來指定環境。java

在微服務架構下咱們可能會有不少的微服務,因此要求的不僅是在各自微服務中進行配置,咱們須要將全部的配置放在統一平臺上進行操做,不一樣的環境進行不一樣的配置,運行期間動態調整參數等等。總之一句話,使用集中管理配置是頗有必要的。git

Spring Cloud Config

  • 官方地址
  • 爲分佈式系統外部配置提供了服務器端和客戶端的支持,它包括config server端和 config client端兩部分
  • Config server端是一個能夠橫向擴展、集中式的配置服務器,它用於集中管理應用程序各個環境下的配置,默認 使用Git存儲配置內容
  • Config client 是config server的客戶端,用於操做存儲在server中的配置屬性
  • 優點
    • 集中管理配置
    • 不一樣環境不一樣配置
    • 運行期間能夠動態調整
    • 配置修改後能夠自動更新

本章源碼

源碼github

所有SpringCloud教程spring

架構圖

spring cloud config架構圖

引入spring cloud config步驟

可基於以前SpringCloudDemo項目改造,也能夠建立爲新的項目bootstrap

1、在GitHub建立一個git倉庫用來存放git配置安全

  • 建立倉庫名字爲spring-cloud-config-repo的私有倉庫
  • 增長其餘模塊(後面config client會詳細說,可先跳過)的配置文件,格式爲
    {application}-{profile}.properties
    並將配置項粘貼到新建的文件中,如:建立zuul-dev.properties,並將原來的zuul模塊中的application.properties所有配置粘貼進來
  • {application}-{profile}.properties,{application}表示微服務的名稱,{label}表示Git對應的分支,默認爲master,{profile}表示配置文件的profile
    訪問時就 /{application}/{profile}[/{label}]或/{label}/{application}-{profile}.properties

2、 建立config server端服務器

  • 建立maven項目,可在原項目中建立Module架構

    config server module

  • 引入pom依賴app

    <dependency>
          <groupId>org.springframework.cloud</groupId>
          <artifactId>spring-cloud-config-server</artifactId>
      </dependency>
  • 建立啓動類maven

    package cn.kxtop.blog.configserver;
    
      import org.springframework.boot.SpringApplication;
      import org.springframework.boot.autoconfigure.SpringBootApplication;
      import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
      import org.springframework.cloud.config.server.EnableConfigServer;
      // 注入到Eureka中,使高可用
      @EnableDiscoveryClient 
      @SpringBootApplication
      @EnableConfigServer
      public class ConfigServerApplication {
    
          public static void main(String[] args) {
              SpringApplication.run(ConfigServerApplication.class);
          }
    
      }
  • 配置配置文件application.properties

    server.port=9999
      # 配置git倉庫的地址(修改成你本身的git倉庫地址)
      spring.cloud.config.server.git.uri=https://github.com/qupengkun/spring-cloud-config-repo.git
      # git倉庫帳號
      spring.cloud.config.server.git.username=YOU_NAME
      # git倉庫祕密
      spring.cloud.config.server.git.password=YOU_PASSWORD
      #eureka,確保Spring cloud config 高可用
      eureka.client.serviceUrl.defaultZone = http://localhost:8761/eureka/
  • 啓動項目並訪問測試
    http請求localhost:9999/zuul/dev
    config-server

3、建立config client端

  • 引入依賴
    <dependency>
          <groupId>org.springframework.cloud</groupId>
          <artifactId>spring-cloud-config-client</artifactId>
      </dependency>
  • 建立bootstrap.properties
    #對應以前git倉庫的文件名,如zuul-dev.properties
      spring.application.name=zuul
      #config server 地址
      spring.cloud.config.uri=http://localhost:9999
      #{profile}名(環境)
      spring.cloud.config.profile=dev
      #{label}名,git倉庫分支
      spring.cloud.config.label=master
  • 刪除原來的application.properties,如沒有,則不用操做直接下一步
  • 啓動client端可見鏈接到了config-server端
    config client
  • 查看eureka發現已經註冊到eureka中
    基於spring cloud config的eureka
  • 測試在線參數修改
    可在Controller上加註解 @RefreshScope 請求server:port/refresh手動刷新

總結及後續

以上基本演示了Spring Cloud Config的用法,仍是比較簡單的,咱們引入了Eureka使Config Server能保證高可用,還能夠增長@RefreshScope手動刷新配置文件,若是配置對安全要求較高,也能夠引入JCE(Java Cryptography Extension)進行加解密操做。

其實每次都去手動刷新配置仍是比較麻煩且有很大的侷限性的,那麼如何修改配置後自動感知並刷新呢?請關注下一章基於Spring Cloud Bus實現自動刷新配置。

持續學習,記錄點滴。更多文章請訪問 文章首發

相關文章
相關標籤/搜索