小白學SpringCloud(三):統一配置中心(config)

config_logo

在分佈式系統中,每一個功能模塊都能拆分成一個獨立的服務,一次請求的完成,可能會調用很多個服務協調來完成。如果我們每個服務都有一個獨立的配置的話,這樣很不方便我們維護。Spring Cloud中爲我們提供了一個config組件爲我們解決了這個問題,並且更改了配置並不需要我們重啓。

一、Config概述

同Eureka一樣,config也分爲server端和client端,我們先來看看server端的原理。這裏引用一張廖師兄的圖(注:圖中的order、product都是客戶端)
config_1
從這張圖我們可以看出,Config Server是以遠端Git作爲依託(SVN也可以,這裏使用Github作爲演示),從遠端Git倉庫中拉取配置並同步到本地Git上。當客戶端需要配置的時候就可以從Server端進行配置的拉取。

二、Config Server配置

1.創建Config工程
跟前文一樣,我們使用IDEA的Spring Initializr創建我們的Config工程,如圖:除了圖中圈起來的config Server要勾上,Eureka Discover也要勾上。
config_2

2.創建遠程倉庫
首先我們先創建一個遠程Git倉庫,這裏以Github爲例,這裏我已經創建好了一個公開倉庫https://github.com/catalinaLi/config_repo
然後在裏面先添加一份配置
config_3
3.配置Config工程
將我們的Config工程註冊到Eureka註冊中心:

eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/ #服務端地址
server:
  port: 8764 #客戶端端口
spring:
  application:
    name: config
  cloud:
    config:
      server:
        git:
          uri: https://github.com/catalinaLi/config_repo #config_Server倉庫地址
          #如果我們配置的是私有倉庫,則還需要遠程倉庫的賬號和密碼
          #username: yourusername  
          #password: yourpassword
env:
  dev   

然後在啓動類上添加註解

@SpringBootApplication
@EnableDiscoveryClient
@EnableConfigServer 
public class ConfigApplication {

    public static void main(String[] args) {
        SpringApplication.run(ConfigApplication.class, args);
    }
}

4. Config Server配置
這裏首先我們要先填一個坑,因爲博主在這裏使用的Spring Cloud是Finchley.RC2版本的。可是這個版本這裏有一個bug,所以我們暫時把pom中Spring Cloud的版本修改爲Finchley.RC1,等待官方的修復。
接下來就可以通過網絡來訪問我們的配置了,首先啓動註冊中心Eureka,然後啓動我們的Config。這時候我們通過瀏覽器訪問http://localhost:8764/client-dev.yml就可以看到我們的配置了。
config_5
這裏是Spring Cloud對配置請求的路徑做了映射,通常爲:

  • /{name}-{profiles}.yml
  • /{label}/{name}-{profiles}.yml

這兩種方式大家可以挑選一個適合你的。
後綴名也可以不是yml,你可以試試properties,json。Spring Cloud會自動幫你轉換。

三、Config Client配置

這裏我們使用上一篇文章小白SpringCloud(二):服務間的調用中的Client項目來進行改造
1.添加pom引用
在FeignClient的pom文件中添加Config Client引用

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-config-client</artifactId>
        </dependency>

2.修改配置文件
首先我們要把配置文件的名字改爲bootstrap.yml,改成這個名字Spring Cloud就會先去Config Server拉取配置。
然後我們要在bootstrap.yml中定義我們要拉取的文件名稱,還記得剛纔說的Spring Cloud對請求的路徑做的映射方式嗎(/{name}-{profiles}.yml)?在這裏我們配置nameprofilesConfig項目的名稱

spring:
  application:
    name: client #name
  cloud:
    config:
      discovery:
        enabled: true
        service-id: config #Eureka Config's name
      profile: dev #profiles

這時候,我們的Client就可以正常啓動啦,怎麼樣簡單吧。

二、Config Server的高可用

統一配置中心的高可用很簡單,只需要我們多啓動幾個相同的實例就好了。Config Client在啓動的時候會根據負載均衡去訪問Config Server中的某一臺.

還記得導語中說的更改配置可以不用重新啓動項目嗎?這裏需要用到另外一個組件,我們在下篇文章進行講解。


本文作者: catalinaLi
本文鏈接: http://catalinali.top/2018/config/
版權聲明: 原創文章,有問題請評論中留言。非商業轉載請註明作者及出處。

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