天天看點

Spring Cloud(八)分布式配置中心Spring Cloud Config

前言

在分布式系統中,會涉及大量的配置檔案。項目環境中有:開發環境、測試環境、生産環境。這些環境的配置又是不一樣的。例如:資料庫的配置、端口号的配置、其他中間件和相關元件的配置都可能不一樣。那麼,如何更加友善的對這些配置檔案進行統一管理和實時更新呢?因為Spring Cloud是全家桶,是以,也提供了配置中心元件Spring Cloud Config,下面就給大家講解如何使用它。

Spring Cloud Config和注冊中心Eureka相似,都有服務端和用戶端,Config-Server用來存放配置檔案。而Config-Client用來讀取配置檔案。

Config-Server的搭建

Config-Server也算是一個服務,需要往注冊中心中注冊。是以,建立一個服務,命名為:config-server,然後在pom中導入限制。

<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-config-server</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
           

接着在啟動類上加上@EnableConfigServer注解,表示開啟配置伺服器的功能。Spring Cloud Config可以使用資料庫存儲配置内容,也可以使用Git倉庫存儲配置内容。部落客這裡就用Git當做容器了。當然,大家需要到GitHub的官網上注冊一個賬号。作為程式員,應該是經常通路這個“全球最大的同性交友網站”,是以,賬号什麼的就不講了。

重點就是需要建立一個存放配置的倉庫。

Spring Cloud(八)分布式配置中心Spring Cloud Config

隻需要填寫倉庫名稱,點選建立即可。因為Git中有分支的概念,是以,master就作為開發環境;建立一個v1.0分支,作為測試環境。關于Git方面的内容,讀者可以自行去查閱相關資料。

就以使用者服務為例,把配置檔案放入配置中心。在master分支,建立一個user-service.yml檔案,寫入相應的配置檔案。

Spring Cloud(八)分布式配置中心Spring Cloud Config

為了測試不同環境,這裡添加了兩個配置。environment(環境)和branch(分支)。然後,在v1.0分支,同樣建立一個user-service.yml檔案,寫入配置檔案。

Spring Cloud(八)分布式配置中心Spring Cloud Config

基本上Git相關的操作就完成了。還需要對config-server的配置檔案進行修改。

spring:
  application:
    name: config-server
  #配置中心相關的配置
  cloud:
    config:
      server:
        git:
          #路徑
          uri: https://github.com/Qingfengchuiwoxin/config-center
          username: *********
          password: *********
          #配置逾時
          timeout: 5
          #預設分支
          default-label: master

server:
  port: 7777

#指定注冊中心
eureka:
  client:
    service-url:
      defaultzone: http://localhost:8761/eureka/
           

服務名稱、端口号、注冊中心,是每一個服務都需要配置的。

配置中心相關的配置:

uri:是Git上配置中心所在倉庫的位址,直接複制粘貼到這裡就行了。注意的是,不需要結尾的.git

username:Git倉庫的使用者名。

password:密碼。

timeout:指定讀取配置檔案的逾時時間。

default-label:指定預設分支。

上面的配置,讀者根據自己的情況自行配置即可。然後,啟動服務,進行通路。

http請求位址和資源檔案映射如下:

/{application}/{profile}[/{label}]
/{application}-{profile}.yml
/{label}/{application}-{profile}.yml
/{application}-{profile}.properties
/{label}/{application}-{profile}.properties
           
Spring Cloud(八)分布式配置中心Spring Cloud Config

Spring Cloud Config支援yml、properties、json三種格式的輸出,部落客喜歡json的方式,是以,不要在意這些。通過這個路徑,成功的通路到了Git倉庫中的配置檔案。這裡的environment為dev,branch為dev,是因為配置檔案中配置了default-label這個屬性。可以在位址欄加上分支名,進行測試。

http://localhost:7777/master/user-service.json

Spring Cloud(八)分布式配置中心Spring Cloud Config

可以看到和第一通路的結果一樣,得到的是master分支的内容。

http://localhost:7777/v1.0/user-service.json

Spring Cloud(八)分布式配置中心Spring Cloud Config

帶上v1.0分支的路徑,就傳回了v1.0分支中的配置了。到這裡。Config-Server就搭建完成了,那麼如何在Config-Client中使用呢?接下來,就給大家講Config-Client的使用。

Config-Client的搭建

這裡就不搭建Config-Client了,就對以前的使用者服務進行改造。要使用一個元件,最首要的就是導入限制啦。

<!-- 配置中心用戶端-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-config-client</artifactId>
        </dependency>
           

然後就是修改配置檔案了,注意,這裡不能再使用以前的application.yml檔案了。需要把檔案名改為bootstrap.yml。因為bootstrap.yml是在application.yml之前加載的,至于原因,讀者自行查閱相關資料。

#應用名稱
spring:
  application:
    name: user-service

  #指定從哪個配置中心讀取
  cloud:
    config:
      discovery:
      	#指定服務id
        service-id: config-server
        #開啟服務支援
        enabled: true
      #指定哪個分支
      label: v1.0
      
#指定注冊中心
eureka:
  client:
    service-url:
      defaultzone: http://localhost:8761/eureka/
           

service-id:對應config-server服務的id。

enable:開啟config服務的支援。

label:和前面的配置一樣,指定分支。

為了更好地反映測試效果,寫一個測試類。

package com.root.project.userservice.controller;

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

/**
 * @ClassName: ConfigClilentController
 * @Author: 清風一陣吹我心
 * @Description: TODO
 * @Date: 2019/2/23 16:08
 * @Version 1.0
 **/
@RestController
@RequestMapping("/cloud")
public class ConfigClientController {

    @Value("${environment}")
    private String environment;

    @Value("${branch}")
    private String branch;

    @Value("${server.port}")
    private String port;

    @GetMapping(value = "/config")
    public String getConfig() {
        return "目前分支:" + branch + ",所屬環境:" + environment + ",端口号" + port;
    }
}

           

使用@Value注解來讀取配置檔案中的值,這裡就對環境、分支、端口進行讀取。

然後,啟動注冊中心、config-server服務、使用者服務。通路:http://localhost:8801/cloud/config

Spring Cloud(八)分布式配置中心Spring Cloud Config

可以看到成功讀取配置檔案的值,目前處于v1.0分支的測試環境。修改配置檔案的label屬性,改為master。重新開機服務。通路:http://localhost:8800/cloud/config

Spring Cloud(八)分布式配置中心Spring Cloud Config

得到了成功的響應。基本上Spring Cloud Config的使用就講完了。當然。作為Spring Cloud的配置中心元件,這些隻是簡單的應用,以後會涉及更深的知識,期待與各位下次再見。

這一路,一直為你加油的那個人,是你自己!

繼續閱讀