1. 程式人生 > >spring cloud 入門系列七:基於Git儲存的分散式配置中心--Spring Cloud Config

spring cloud 入門系列七:基於Git儲存的分散式配置中心--Spring Cloud Config

我們前面接觸到的spring cloud元件都是基於Netflix的元件進行實現的,這次我們來看下spring cloud 團隊自己建立的一個全新專案:Spring Cloud Config.
它用來為分散式系統中的基礎設施和微服務提供集中化的外部配置支援,分為服務端和客戶端兩個部分。

其中服務端也稱為分散式配置中心,他是獨立的微服務應用,用來連線配置倉庫併為客戶端提供獲取介面(這些介面返回配置資訊、加密、解密資訊等);

客戶端是微服務架構中的各個微服務應用或基礎設施,它們通過制定的配置中心來管理應用資源與業務相關的配置內容,並在啟動的時候從配置中心獲取和載入配置資訊。
由於配置中心預設採用Git來儲存配置資訊,因此我們會用到Git相關的內容,如果沒有用過Git或者忘記怎麼用了,可以參考下廖雪峰老師的

Git教程
另外,我自己用的Git遠端倉庫是碼雲。
====================華麗的分割線===================
接下來看下程式碼怎麼實現。

一、準備遠端Git倉庫

  1. 在Gitee上新建一個專案https://gitee.com/sam-uncle/spring-cloud-learning
  2. 在專案下新建子目錄spring-cloud-config-file,然後新建三個檔案
    1.   
    2. 內容分別是from=git-dev-1.0、from=git-test-1.0、from=git-1.0
  3. 新建一個分支config-lable-test,新分支裡面新建三個同名的檔案,不過內容分別是from=git-dev-2.0、from=git-test-2.0、from=git-2.0

二、構建配置中心

先給出最終程式碼結構:

  

  搭建過程如下:

  1. 新建maven工程config-server
  2. 修改POM檔案
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation
    ="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.sam</groupId> <artifactId>config-server</artifactId> <version>0.0.1-SNAPSHOT</version> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.1.RELEASE</version> </parent> <properties> <javaVersion>1.8</javaVersion> </properties> <!-- 使用dependencyManagement進行版本管理 --> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Camden.SR6</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <dependencies> <!-- 引入config server依賴 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-config-server</artifactId> </dependency> </dependencies> </project>
  3. 建立啟動類
    /**
     * @EnableConfigServer
     * 
     * 開啟Spring Cloud Config 的服務端功能
     *
     */
    @SpringBootApplication
    @EnableConfigServer
    public class ConfigServerApp {
    
        public static void main(String[] args) {
            SpringApplication.run(ConfigServerApp.class, args);
        }
    }
  4. 配置application.properties檔案,指定遠端倉庫資訊
    server.port=7001
    spring.application.name=config-server
    
    #配置Git倉庫的地址
    spring.cloud.config.server.git.uri=https://gitee.com/sam-uncle/spring-cloud-learning/
    #配置倉庫路徑下的相對搜尋位置,可以配置多個
    spring.cloud.config.server.git.search-paths=spring-cloud-config-file
    #這裡配置你的Git倉庫的使用者名稱
    spring.cloud.config.server.git.username=使用者名稱
    #這裡配置你的Git倉庫的密碼
    spring.cloud.config.server.git.password=密碼
  5. 啟動並驗證

    訪問配置資訊的URL與配置檔案的對映關係如下:

    • /{application}/{profile} [/{label}]
    • /{application}-{profile}.yml
    • /{label}/{application}-{profile}.yml
    • /{application}-{profile}.properties
    • /{label}/{appliction}-{profile}.properties

    上面的url會對映{application}-{profile}.properties對應的配置檔案,其中{label}對應Git上不同的分支,預設是master。

    通過瀏覽器訪問http://localhost:7001/sam/dev/config-label-test,結果如下:

    


三、實現客戶端

最終程式碼結構:

  

   搭建過程如下:

  1. 新建maven工程config-client
  2. 修改POM檔案
    <project xmlns="http://maven.apache.org/POM/4.0.0"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <groupId>com.sam</groupId>
        <artifactId>config-client</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>1.5.1.RELEASE</version>
        </parent>
    
        <properties>
            <javaVersion>1.8</javaVersion>
        </properties>
        <!-- 使用dependencyManagement進行版本管理 -->
        <dependencyManagement>
            <dependencies>
                <dependency>
                    <groupId>org.springframework.cloud</groupId>
                    <artifactId>spring-cloud-dependencies</artifactId>
                    <version>Camden.SR6</version>
                    <type>pom</type>
                    <scope>import</scope>
                </dependency>
            </dependencies>
    
        </dependencyManagement>
    
        <dependencies>
            <!-- 引入config依賴 -->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-config</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
    
        </dependencies>
    
    </project>
  3. 建立啟動類
    @SpringBootApplication
    public class ConfigClientApp {
    
        public static void main(String[] args) {
            SpringApplication.run(ConfigClientApp.class, args);
        }
    
    }
  4. 配置bootstrap.properties檔案,指定config-server位置
    server.port=7002
    #{application}
    spring.application.name=sam
    #{profile}
    spring.cloud.config.profile=dev
    #{label}
    spring.cloud.config.label=master
    
    #config server uri
    spring.cloud.config.uri=http://localhost:7001/
  5. 建立controller
    @RefreshScope
    @RestController
    public class TestController {
    
        
        /**
         * 通過@Value 來講配置檔案中的值寫入到程式碼中
         */
        @Value("${from}")
        private String from;
    
        @RequestMapping("/from")
        public String from() {
            return from;
        }
    }
  6. 啟動並測試

    

四、工作原理
Spring Cloud Config配置中心的工作原理如下:

  1. 客戶端啟動時,根據bootstrap.properties中配置的應用名{application}、環境名{profile}、分支名{label},向Config Server請求獲取配置資訊。
  2. Config Server根據自己維護的Git倉庫資訊和客戶傳遞過來的配置定位資訊去查詢配置資訊。
  3. 通過git clone命令將找到的配置資訊下載到本地(Config Server的檔案系統中)。在通過頁面訪問或啟動客戶端的時候,我們在服務端能看到如下下載的log:
    2018-05-14 22:51:58.055  INFO 3084 --- [nio-7001-exec-1] o.s.c.c.s.e.NativeEnvironmentRepository  : Adding property source: file:/C:/Users/sam/AppData/Local/Temp/config-repo-8627749771720918793/spring-cloud-config-file/sam-dev.properties
    2018-05-14 22:51:58.055  INFO 3084 --- [nio-7001-exec-1] o.s.c.c.s.e.NativeEnvironmentRepository  : Adding property source: file:/C:/Users/sam/AppData/Local/Temp/config-repo-8627749771720918793/spring-cloud-config-file/sam.properties
  4. Config Server建立Spring 的ApplicationContext例項,並從Git本地倉庫中載入配置檔案,最後將這些配置內容讀取出來返回給客戶端。
  5. 客戶端在獲取外部配置資訊後加載到客戶端的applicationContext例項。

相關推薦

spring cloud 入門系列基於Git儲存分散式配置中心--Spring Cloud Config

我們前面接觸到的spring cloud元件都是基於Netflix的元件進行實現的,這次我們來看下spring cloud 團隊自己建立的一個全新專案:Spring Cloud Config.它用來為分散式系統中的基礎設施和微服務提供集中化的外部配置支援,分為服務端和客戶端兩個部分。 其中服務端也稱為分散式

spring cloud 入門系列基於Git存儲的分布式配置中心--Spring Cloud Config

入門 代碼結構 dev eas TP scope ict AI 新項目 我們前面接觸到的spring cloud組件都是基於Netflix的組件進行實現的,這次我們來看下spring cloud 團隊自己創建的一個全新項目:Spring Cloud Config.它用來為分

史上最簡單的SpringCloud教程 | 第 高可用的分散式配置中心(Spring Cloud Config)

最新Finchley版本請訪問: https://www.fangzhipeng.com/springcloud/2018/08/30/sc-f7-config/ 或者 http://blog.csdn.net/forezp/article/details/81041

企業級 SpringCloud 教程 () 高可用的分散式配置中心(Spring Cloud Config)

一、準備工作 繼續使用上一篇文章的工程,建立一個eureka-server工程,用作服務註冊中心。 在其pom.xml檔案引入Eureka的起步依賴spring-cloud-starter-eureka-server,程式碼如下 : <?xml version="1.0" e

SpringCloud微服務雲架構構建B2B2C電子商務平臺之-()高可用的分散式配置中心(Spring Cloud Config)

講述了一個服務如何從配置中心讀取檔案,配置中心如何從遠端git讀取配置檔案,當服務例項很多時,都從配置中心讀取檔案,這時可以考慮將配置中心做成一個微服務,將其叢集化,從而達到高可用,架構圖如下: 一、準備工作 繼續使用上一篇文章的工程,建立一個eureka-server工程,用作服務註冊中心。 在其

SpringCloud微服務雲架構構建B2B2C電子商務平臺之- ()高可用的分散式配置中心(Spring Cloud Config)

講述了一個服務如何從配置中心讀取檔案,配置中心如何從遠端git讀取配置檔案,當服務例項很多時,都從配置中心讀取檔案,這時可以考慮將配置中心做成一個微服務,將其叢集化,從而達到高可用,架構圖如下: 一、準備工作 繼續使用上一篇文章的工程,建立一個eureka-server工程,用作服務註冊中心。 在

關於SpringCloud微服務雲架構構建B2B2C電子商務平臺之-()高可用的分散式配置中心(Spring Cloud Config)

講述了一個服務如何從配置中心讀取檔案,配置中心如何從遠端git讀取配置檔案,當服務例項很多時,都從配置中心讀取檔案,這時可以考慮將配置中心做成一個微服務,將其叢集化,從而達到高可用,架構圖如下: 一、準備工作 繼續使用上一篇文章的工程,建立一個eureka-server工程,用作服務註

java B2B2C springmvc mybatis電子商城系統-()高可用的分散式配置中心(Spring Cloud Config)

講述了一個服務如何從配置中心讀取檔案,配置中心如何從遠端git讀取配置檔案,當服務例項很多時,都從配置中心讀取檔案,這時可以考慮將配置中心做成一個微服務,將其叢集化,從而達到高可用,架構圖如下: 一、準備工作 繼續使用上一篇文章的工程,建立一個eureka-server工程,用作服務註

史上最簡單的SpringCloud教程 | 第篇: 高可用的分散式配置中心(Spring Cloud Config)

上一篇文章講述了一個服務如何從配置中心讀取檔案,配置中心如何從遠端git讀取配置檔案,當服務例項很多時,都從配置中心讀取檔案,這時可以考慮將配置中心做成一個微服務,將其叢集化,從而達到高可用,架構圖如下: 一、準備工作 繼續使用上一篇文章的工程,建立一個e

SpringCloud教程 | 第13篇高可用的分散式配置中心 Spring Cloud Bus 訊息匯流排整合(RabbitMQ)

上一篇文章,留了一個懸念,Config Client 實現配置的實時更新,我們可以使用 /refresh 介面觸發,如果所有客戶端的配置的更改,都需要手動觸發客戶端 /refresh ,當服務越來越多的時候,那豈不是維護成本很高,顯然不太合適,而使用Spring Cloud

spring cloud 入門系列使用Hystrix 實現斷路器進行服務容錯保護

關系 調用 說明 schema 技術 能力 BE 最終 響應 在微服務中,我們將系統拆分為很多個服務單元,各單元之間通過服務註冊和訂閱消費的方式進行相互依賴。但是如果有一些服務出現問題了會怎麽樣? 比如說有三個服務(ABC),A調用B,B調用C。由於網絡延遲或C本身代碼有

spring cloud 入門系列使用Zuul 實現API閘道器服務

通過前面幾次的分享,我們瞭解了微服務架構的幾個核心設施,通過這些元件我們可以搭建簡單的微服務架構系統。比如通過Spring Cloud Eureka搭建高可用的服務註冊中心並實現服務的註冊和發現; 通過Spring Cloud Ribbon或Feign進行負載均衡;通過Spring Cloud Hyst

spring cloud 入門系列使用Eureka 進行服務治理

服務治理可以說是微服務架構中最為核心和基礎的模組,它主要用來實現各個微服務例項的自動化註冊和發現。 Spring Cloud Eureka是Spring Cloud Netflix 微服務套件的一部分,主要負責完成微服務架構中的服務治理功能。 本文通過簡單的小例子來分享下如何通過Eureka進行服務治理:

spring cloud 入門系列初識spring cloud

最近看到微服務很火,也是未來的趨勢, 所以就去學習下,在dubbo和spring cloud之間我選擇了從spring cloud,主要有如下幾種原因: dubbo主要專注於微服務中的一個環節--服務治理,像服務註冊和發現這種還需要zookeeper第三方的中間;但是spring cloud提供了微服

spring cloud 入門系列使用Eureka 搭建高可用服務註冊中心

在上一篇中分享了如何使用Eureka 進行服務治理,裡面搭建的服務註冊中心是單體的, 但是在實際的應用中,分散式系統為了防止單體服務宕機帶來嚴重後果,一般都會採用伺服器叢集的形式,服務註冊中心也是一樣,需要多臺服務一起工作,組成高可用的服務註冊中心。這樣,如果有其中一臺宕機,系統也能正常執行。 那麼如何來

spring cloud 入門系列使用Feign 實現宣告式服務呼叫

一、Spring Cloud Feign概念引入通過前面的隨筆,我們瞭解如何通過Spring Cloud ribbon進行負責均衡,如何通過Spring Cloud Hystrix進行服務斷路保護,兩者作為基礎工具類框架應用在各種基礎設施類微服務和業務類微服務中,並且成對存在,那麼有沒有更高層的封裝,將兩者的

spring cloud 入門系列使用spring cloud sleuth整合zipkin進行服務鏈路追蹤

好久沒有寫部落格了,主要是最近有些忙,今天忙裡偷閒來一篇。 =======我是華麗的分割線========== 微服務架構是一種分散式架構,微服務系統按照業務劃分服務單元,一個微服務往往會有很多個服務單元,一個請求往往會有很多個單元參與,一旦請求出現異常,想要去定位問題點真心不容易,因此需要有個東西去跟蹤

SSE影象演算法優化系列二十三: 基於value-and-criterion structure 系列濾波器(如Kuwahara,MLV,MCV濾波器)的優化。 SSE影象演算法優化系列十四區域性均方差及區域性平方差演算法的優化 SSE影象演算法優化系列七:基於SSE實現的極速的矩形核腐蝕和膨脹(

       基於value-and-criterion structure方式的實現的濾波器在原理上其實比較簡單,感覺下面論文中得一段話已經描述的比較清晰了,直接貼英文吧,感覺翻譯過來反而失去了原始的韻味了。        T

Spring Cloud系列(二十分散式配置中心Spring Cloud Config——Finchley版本

Spring Cloud Config是Spring Cloud團隊建立的一個全新專案,用來為分散式系統中的基礎設施和微服務應用提供集中化的外部配置支援,它分為服務端與客戶端兩個部分。其中服務端也稱為分散式配置中心,它是一個獨立的微服務應用,用來連線配置倉庫併為客戶端提供獲取

一起來學Spring Cloud | 第分散式配置中心(Spring Cloud Config)

上一章節,我們講解了服務閘道器zuul,本章節我們從git和本地兩種儲存配置資訊的方式來講解springcloud的分散式配置中心-Spring Cloud Config。 一、Spring Cloud Config簡介: Spring Cloud Config專案是一個解決分散式系統的配置管理方案。它包