SpringCloud —— Config 配置中心

前文

SpringCloud 簡介

SpringCloud 版本選型

SpringCloud 工程構建

SpringCloud —— Eureka 註冊中心

SpringCloud —— Eureka 集羣

SpringCloud —— 服務註冊進 Eureka 集羣

SpringCloud —— Eureka 自我保護

SpringCloud —— SpringCloud Consul 實現服務註冊中心

SpringCloud —— 三個註冊中心的異同點

SpringCloud —— Ribbon

SpringCloud —— Ribbon 負載均衡算法

SpringCloud —— OpenFeign

SpringCloud —— Hystrix 簡介

SpringCloud —— Hystrix 斷路器

SpringCloud —— HystrixDashboard 服務監控

SpringCloud —— Gateway 網關

分佈式系統面臨的配置問題

    微服務意味着要將單體應用中的業務拆分成一個個子服務,每個服務的粒度相對較小,因此係統中會出現大量的服務。由於每個服務都需要必要的配置信息才能運行,所有一套集中式的、動態的配置管理設施是必不可少的

SpringCloud Config 是什麼?

SpringCloud Config 作爲微服務架構中的微服務提供集中化的外部配置支持,配置服務器爲 各個不同微服務應用 的所有環境提供了一個 中心化的外部配置

在這裏插入圖片描述

SpringCloud Config 分爲 服務端和客戶端兩部分

    服務端也稱爲 分佈式配置中心,它是一個獨立的微服務應用,用來連接配置服務器併爲客戶端提供獲取配置信息,加密 / 解密信息等訪問接口

    客戶端則是通過指定的配置中心來管理應用資源,以及與業務相關的配置內容,並在啓動的時候從配置中心獲取和加載配置信息配置服務器默認採用 Git 來存儲配置信息,這樣就有助於對環境配置進行版本管理,並且可以通過 Git 客戶端工具來方便的管理和訪問配置內容

SpringCloud Config 能幹嘛

  • 集中管理配置文件
  • 不同環境不同配置,動態化的配置更新,分環境部署比如 dev/test/prod/beta/release
  • 運行期間動態調整配置,不需要再每個服務部署的機器上編寫配置文件,服務會向配置中心統一拉取配置自己的信息
  • 當配置發生變動時,服務不需要重啓即可感知到配置的變化並應用新的配置
  • 將配置信息以 REST 接口的形式暴露

SpringCloud Config 部署測試

新建 Repository

用自己的 Github 賬號在 Github 上新建一個名爲 springcloud-config 的新 Repository
在這裏插入圖片描述
在電腦新建一個文件夾
在這裏插入圖片描述
將 Github 新建的倉庫 clone 到該文件夾下
在這裏插入圖片描述
在這裏插入圖片描述

新建 Module(8033)

在這裏插入圖片描述

編寫 application.yml 文件

server:
  port: 8033

spring:
  application:
    name:  demo-config-center #註冊進Eureka服務器的微服務名
  cloud:
    config:
      server:
        git:
          uri: .git #GitHub上面的git倉庫名字
          ####搜索目錄
          search-paths:
          - springcloud-config
      ####讀取分支
      label: master

#服務註冊到eureka地址
eureka:
  client:
    service-url:
      defaultZone: http://localhost:7001/eureka

編寫啓動類

package com.java.springcloud;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.config.server.EnableConfigServer;

/**
 * @author Woo_home
 * @create 2020/3/30 12:27
 */

@SpringBootApplication
@EnableConfigServer
public class ConfigCenterMain8033 {
    public static void main(String[] args){
        SpringApplication.run(ConfigCenterMain8033.class,args);
    }
}

修改 hosts 文件

修改 C:\Windows\System32\drivers\etc 下的 hosts 文件,在底部增加以下內容
在這裏插入圖片描述

測試訪問

在啓動服務之前先上傳一個文件到 Github 上(格式名稱如:{application} - {name}.yml),待會讓 8033 讀取
在這裏插入圖片描述
    先啓動 EurekaServer 7001 再啓動 8033,訪問 http://config-8033.com:8033/master/config-dev.yml,如下:(注意:在 Github 上新建倉庫的時候要設置爲 public,不然會報錯,具體是不是因爲這個我也不知道,知道的朋友可以在評論區評論下,相互學習,謝謝)
在這裏插入圖片描述
成功從 Github 上獲取信息

新建 Module(8055)

上面已經基本實現了配置中心,那麼要新建客戶端從 server 端讀取內容了
在這裏插入圖片描述

編寫 bootstrap.yml 文件

application.yml 是用戶級的資源配置項,bootstrap.yml 是系統級的,優先級更加高

    SpringCloud 會創建一個 “Bootstrap Context”,作爲 Spring 應用的 “Application Context” 的 父上下文。初始化的時候,“Bootstrap Context” 負責從 外部源 加載配置屬性並解析配置。這兩個上下文共享一個從外部獲取的 “Environment”

    “Bootstrap” 屬性有高優先級,默認情況下,它們不會被本地配置覆蓋。“Bootstrap Context” 和 “Application Context” 有着不同的約定,所以新增了個 “bootstrap.yml” 文件,保證 “Bootstrap Context” 和 “Application Context” 配置的分離


要將 Client 模塊下的 application.yml 文件修改爲 bootstrap.yml,這是很關鍵的,因爲 bootstrap.yml 是比 application.yml 先加載的,bootstrap.yml 優先級高於 application.yml

在這裏插入圖片描述

server:
  port: 8055

spring:
  application:
    name: config-client
  cloud:
    #Config客戶端配置
    config:
      label: master #分支名稱
      name: config #配置文件名稱
      profile: dev #讀取後綴名稱   上述3個綜合:master分支上config-dev.yml的配置文件被讀取http://config-8033.com:8033/master/config-dev.yml
      uri: http://localhost:8033 #配置中心地址

#服務註冊到eureka地址
eureka:
  client:
    service-url:
      defaultZone: http://localhost:7001/eureka

編寫啓動類

package com.java.springcloud;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;

/**
 * @author Woo_home
 * @create 2020/3/30 13:26
 */

@SpringBootApplication
@EnableEurekaClient
public class ConfigClientMain8055 {
    public static void main(String[] args){
        SpringApplication.run(ConfigClientMain8055.class,args);
    }
}

編寫 Controller

package com.java.springcloud.controller;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @author Woo_home
 * @create 2020/3/30 13:27
 */

@RestController
public class ConfigClientController {

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

    @GetMapping("/configInfo")
    public String getConfigInfo() {
        return configInfo;
    }
}

測試訪問

先訪問 http://eureka7001.com:7001/,可以發現 配置中心 和 客戶端 都已成功註冊到 EurekaServer
在這裏插入圖片描述
訪問 http://config-8033.com:8033/master/config-dev.yml 配置中心也是 OK 的
在這裏插入圖片描述
訪問 http://localhost:8055/configInfo 客戶端也成功了
在這裏插入圖片描述

Config 客戶端動態刷新

爲了避免每次更新配置都要重啓客戶端微服務 8055

動態刷新

修改 8055 模塊

在 8055 模塊的 POM 文件中引入 actuator
在這裏插入圖片描述

修改 8055 模塊的 bootstrap.yml 文件

在 bootstrap.yml 文件中新增以下配置

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

修改 ConfigClientController

在 ConfigClientController 中增加一個 @RefreshScope 註解,實現自動刷新的功能
在這裏插入圖片描述

測試訪問

修改 Github 上的配置文件
在這裏插入圖片描述
訪問 http://config-8033.com:8033/master/config-dev.yml OK
在這裏插入圖片描述
使用 curl 工具去刷新一下 8055,這樣就不必重啓 8055 也可以獲取修改之後的內容

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

在這裏插入圖片描述
訪問 http://localhost:8055/configInfo 發現獲取的也是修改後的內容
在這裏插入圖片描述


完整代碼已上傳至碼雲, 代碼地址

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章