天天看點

【spring cloud】(五)配置中心——springcloud Config🍹 springcloud Config

【spring cloud】(五)配置中心——springcloud Config🍹 springcloud Config
  各位小夥伴們大家好,歡迎來到這個小紮紮的spring cloud專欄,在這個系列專欄中我對B站尚矽谷陽哥的spring cloud教程進行一個總結,鑒于 看到就是學到、學到就是賺到 精神,這波依然是血賺 ┗|`O′|┛

💡Config知識點速覽

  • 🍹 springcloud Config
    • 🍸 什麼是springcloud Config?
    • 🍸 config服務端的配置使用
    • 🍸 config用戶端的相關問題
      • 🍷 config用戶端的配置使用
      • 🍷 動态重新整理問題
    • 🍸 config用戶端的遺留問題

🍹 springcloud Config

🍸 什麼是springcloud Config?

  簡單來說,Spring Cloud Config就是我們通常意義上的配置中心,也就是微服務項目中,每一個微服務都需要配置相應的配置,如果不同服務的配置檔案有相同的配置,如果這些相同配置需要修改的話就要全都修改一遍。如果使用springcloud Config的話就可以把原本放在本地檔案的配置抽取出來放在中心伺服器,進而能夠提供更好的管理、釋出能力。

  Config分為服務端和用戶端,服務端也稱為分布式配置中心,它是一個獨立的微服務應用,用來連接配接配置伺服器并為用戶端提供擷取配置資訊,加密/解密資訊等訪接口。用戶端則是通過指定的配置中心來管理應用資源,以及與業務相關的配置内容,并在啟動的時候從配置中心擷取和加載配置資訊配置伺服器預設采用git來存儲配置資訊,這樣就有助于對環境配置進行版本管理,并且可以通過git用戶端工具來友善的管理和通路配置内容

🍸 config服務端的配置使用

  第一步: 外部config需要結合git使用,于是需要在github或者gitee建立一個倉庫,倉庫裡全都是各種配置檔案,git遠端倉庫的建立這裡就不多加贅述,建立完成之後需要擷取到倉庫的連結

【spring cloud】(五)配置中心——springcloud Config🍹 springcloud Config

  第二步: 引入相關依賴

<!--Config服務端-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-config-server</artifactId>
</dependency>
           

  第三步: 配置檔案配置遠端倉庫位址

server:
  port: 3344

spring:
  application:
    name: cloud-config-center #注冊進Eureka伺服器的微服務名
  cloud:
    config:
      server:
        git:
          uri: https://gitee.com/mereign/springcloud-config.git    #GitHub或者Gitee上面的git倉庫名字
          search-paths: #搜尋目錄
            - springcloud-config
      label: master #讀取分支
      #啟動成功後通路的路徑 http://ip:3344/{label}/{application}-{profile}.yml 能通路的配置檔案 就表示成功了

eureka:
  client:
    service-url:
      defaultZone: http://localhost:7001/eureka
           

  啟動配置中心微服務子產品,但是有些小夥伴會遇到這個異常Authentication is required but no CredentialsProvider has been registered,原因是你的遠端倉庫建立的私有的未開源,解決方案有兩種,一來就是把倉庫修改為開源倉庫,還有就是使用下面的方法配置你github或者Gitee的使用者名和密碼

spring:
  application:
    name: cloud-config-center #注冊進Eureka伺服器的微服務名
  cloud:
    config:
      server:
        git:
          uri: https://gitee.com/mereign/springcloud-config.git    #GitHub或者Gitee上面的git倉庫名字
          username: 自己的github或者Gitee使用者名
          password: 自己的github或者Gitee密碼
           

  第四步: 主程式類使用@EnableConfigServer注解标注Config服務端

配置好了之後啟動微服務,可以使用url連結直接讀取檔案裡的内容
【spring cloud】(五)配置中心——springcloud Config🍹 springcloud Config

🍸 config用戶端的相關問題

🍷 config用戶端的配置使用

  第一步: 引入相關依賴,這裡用戶端的依賴與服務端有所不同

<!--Config服務端-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-config</artifactId>
</dependency>
           

  第二步: 配置檔案,這裡的用戶端的配置檔案與之前的有所不同,命名為bootstrap.yml,主要差別為applicaiton.yml是使用者級的資源配置項,而bootstrap.yml是系統級的,優先級更加高

server:
  port: 3355

spring:
  application:
    name: config-client
  cloud:
    config:
      uri: http://localhost:3344  #配置中心的位址
      label: master  #分支名稱
      name: config  #配置檔案名稱
      profile: dev  #讀取字尾名稱   上述三個綜合http://localhost:3344/master/config-dev.yml

#服務注冊到eureka位址
eureka:
  client:
    service-url:
      #設定與eureka server互動的位址查詢服務和注冊服務都需要依賴這個位址
      defaultZone: http://localhost:7001/eureka #單機版
           
  經過上述配置,等服務啟動開的時候,會3355服務端會到3344服務端擷取config-dev的配置内容,3344服務端再來連接配接配置的GitHub或者Gitee倉庫進而擷取config-dev的配置内容

  第三步: 主程式類隻需要标注eureka用戶端即可,無需标注config用戶端

  第四步: 服務端的url連結形式擷取内容,而用戶端需要使用REST接口的形式擷取指定配置資訊

@RestController
public class ConfigController {

    @Value("${config.info}")
    private String configInfo;

    @GetMapping("/configInfo")
    public String getConfigInfo() {
        return configInfo;
    }
}
           
啟動主程式類(要先啟動注冊中心eureka再啟動config服務端,最後才能啟動config用戶端),然後通路controller中的接口即可獲得相應的配置資訊
【spring cloud】(五)配置中心——springcloud Config🍹 springcloud Config

🍷 動态重新整理問題

  當遠端倉庫的配置修改之後,服務端通過url連結的形式擷取内容是更新之後的,但是用戶端使用REST接口的形式擷取到的配置資訊則是更新之前的,隻有重新開機config服務端微服務才能通過用戶端接口通路到更新之後的配置資訊。

  為了解決上述的問題,可以使用動态重新整理配置服務端微服務,避免每次配置更新都需要重新開機微服務才能擷取最新配置的痛點

  第一步: 引入actuator監控技術依賴

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
           

  第二步: bootstrap.yml檔案中暴露服務端點,可以讓這個服務處于可被監控狀态

# 暴露監控端點
management:
  endpoints:
    web:
      exposure:
        include: "*"
           

  第三步: 在controller類上加@RefreshScope注解

  第四步: 發送post請求,手動重新整理3355服務端的監控,這樣才能重新整理config服務端擷取的配置資訊

curl -X POST "http://localhost:3355/actuator/refresh
           

  第五步: 到此為止就config服務端就可以通路到遠端倉庫中最新的配置資訊了

🍸 config用戶端的遺留問題

  config用戶端動态重新整了解決了微服務每次都要重新開機才能擷取最新配置資訊的問題,但是,如果config用戶端有很多呢?每次遠端倉庫配置修改都需要使用post請求手動重新整理所有的服務嗎?是不是也很麻煩,那麼是否可以使用廣播的形式,一次通知處處生效,大範圍的自動重新整理,定制化的指定服務重新整理?那就用到了下一篇部落格學習的消息總線——springcloud Bus