Spring Cloud Config 分布式配置中心「Finchley 版」

一、 介紹

1,為什麼需要配置中心?

當服務部署的越來越多,規模越來越大,對應的機器數量也越來越龐大,靠人工來管理和維護服務的配置信息,變得困難,容易出錯。

因此,需要一個能夠動態註冊和獲取服務信息的地方,來統一管理服務名稱和其對應的服務器列表信息,稱之為服務配置中心。服務提供者在啟動時,將其提供的服務名稱、服務器地址註冊到服務配置中心。服務消費者通過服務配置中心來獲得需要調用的服務,通過相應的負載均衡算法,選擇其中一臺服務器開始調用。

2,什麼是 Spring Cloud Config

spring cloud config 是 spring cloud 中的一個組件,分佈式配置中心組件,它支持配置服務放在配置服務的內存中(即本地),也支持放在遠程Git倉庫中。在spring cloud config 組件中,分兩個角色,一是config server,二是config client。

二、 Spring Cloud Config 實戰

2.1,構建Config Server

2.1.1,創建一個名為config-server 的 spring-boot項目,pom.xml依賴如下: 注意組件版本我用的是 Spring Boot 2.0.x

<parent>

<groupId>org.springframework.bootgroupId>

<artifactId>spring-boot-starter-parentartifactId>

<version>2.0.4.RELEASEversion>

<relativePath/>

parent>

<properties>

<project.build.sourceEncoding>UTF-8project.build.sourceEncoding>

<project.reporting.outputEncoding

>UTF-8project.reporting.outputEncoding>

<java.version>1.8java.version>

<spring-cloud.version>Finchley.RELEASEspring-cloud.version>

properties>

<dependencies>

<dependency>

<groupId>org.springframework.cloudgroupId>

<artifactId>spring-cloud-config-serverartifactId>

dependency>

<dependency>

<groupId

>org.springframework.bootgroupId>

<artifactId>spring-boot-starter-testartifactId>

<scope>testscope>

dependency>

dependencies>

2.2,在入口類ConfigServerApplication 添加註解 @EnableConfigServer ,開啟Config配置中心服務端

2.3,在根目錄新建的配置文件 config-dev.yml ,並提交到git倉庫,實例是mysql的數據原本配置信息,提交的github中,配置文件如下:

spring:

datasource:

driver-class-name: com.mysql.jdbc.Driver

url: jdbc:mysql://192.168.10.100:3306/spring?useSSL=false

username: test

password: 123456

2.4,配置 application.yml ,配置如下:

spring:

application:

name: config-server

cloud:

config:

server:

git:

uri

: https://github.com/jarvisqi/spring-cloud-microservice

search-paths: config-server

username:

password:

default-label: master

server:

port: 9400

  • spring.cloud.config.server.git.url :指定git的倉庫地址,改成你自己的
  • spring.cloud.config.server.git.search-paths :指定你的配置文件所在的目錄
  • username,password 如果是github公開的就不用添加,自己的私有倉庫自己添加

2.4,啟動Config-Server,並訪問: http://localhost:9400/config/dev 地址,看到如下信息,說明服務端正常運行:

{

"name": "config",

"profiles": [

"dev"

],

"label": null,

"version": "e64289cb775e2ac7db7494c07d7e8c4933163daf",

"state": null,

"propertySources": [

{

"name": "https://github.com/jarvisqi/spring-cloud-microservice/config-server/config-dev.yml",

"source": {

"spring.datasource.driver-class-name": "com.mysql.jdbc.Driver",

"spring.datasource.url": "jdbc:mysql://192.168.10.100:3306/spring?useSSL=false",

"spring.datasource.username": "test",

"spring.datasource.password": 123456

}

}

]

}

source 下面的key就是配置的信息,http請求地址和資源文件映射如下:

/{application}/{profile}[/{label}]

/{application}-{profile}.yml

/{label}/{application}-{profile}.yml

/{application}-{profile}.properties

/{label}/{application}-{profile}.properties

2.2,構建Config Client

2.2.1,創建一個名為config-client 的 spring-boot項目,pom.xml依賴如下: 注意組件版本我用的是 Spring Boot 2.0.x

<parent>

<groupId>org.springframework.bootgroupId>

<artifactId>spring-boot-starter-parentartifactId>

<version>2.0.4.RELEASEversion>

<relativePath/>

parent>

<properties>

<project.build.sourceEncoding>UTF-8project.build.sourceEncoding

>

<project.reporting.outputEncoding>UTF-8project.reporting.outputEncoding>

<java.version>1.8java.version>

<spring-cloud.version>Finchley.RELEASEspring-cloud.version>

properties>

<dependencies>

<dependency>

<groupId>org.springframework.bootgroupId>

<artifactId>spring-boot-starter-webartifactId>

dependency>

<dependency

>

<groupId>org.springframework.cloudgroupId>

<artifactId>spring-cloud-starter-configartifactId>

dependency>

<dependency>

<groupId>org.springframework.bootgroupId>

<artifactId>spring-boot-starter-actuatorartifactId>

dependency>

<dependency>

<groupId>org.springframework.bootgroupId>

<artifactId

>spring-boot-starter-testartifactId>

<scope>testscope>

dependency>

dependencies>

2.2.2,配置 application.yml ,配置如下:

spring:

application:

name: config-client

cloud:

config:

uri: http://localhost:9400

name

: config

profile: dev

label: master

server:

port: 9410

  • spring.cloud.config.uri : 指定config-server 服務端地址,注意並不是git倉庫地址
  • spring.cloud.config.name: 注意 如果 name 值不寫,會默認取 spring.application.name 的值,資源文件名就變成了 config-client-dev ,根據http請求地址和資源文件映射,肯定找不到,會報錯,無法啟動
  • spring.cloud.config.profile:一般就是 dev ,test ,prd,你自定義也行,因為我提交的文件寫的是 dev
  • spring.cloud.config.label :git的分支

2.2.3,配置 boostrap.yml ,配置如下:

spring:

cloud:

config:

uri: http://localhost:9400

注意 ,此處有坑,如果你不添加 boostrap.yml 文件並重新指定指定 spring.cloud.config.uri ,啟動客戶端會報錯,會默認指定 端口:8888,不是自定義的端口,無法啟動會報錯,當然你可以直接用 boostrap.yml ,我看那此處很多人遇到問題,遇到問題就說降低版本到1.5.X就正確,這也能算解決方案?

2.2.4,添加 ConfigController 接口,並獲取配置信息,代碼如下:

@RestController

public class ConfigController {

@Value("${spring.datasource.driver-class-name}")

private String driverClassName;

@Value("${spring.datasource.url}")

private String url;

@Value("${spring.datasource.username}")

private String username;

@Value("${spring.datasource.password}")

private String password;

@RequestMapping("/dataconfig")

public DataConfig getDataConfig() {

DataConfig config = new DataConfig(driverClassName, url, username, password);

return config;

}

}

2.2.5,首先啟動config-server,保證運行正常,再啟動 config-client,並請求地址 http://localhost:9410/dataconfig ,得到如下結果,說明配置中心完成:

{

"driverClassName": "com.mysql.jdbc.Driver",

"url": "jdbc:mysql://192.168.10.100:3306/spring?useSSL=false",

"username": "test",

"password": "123456"

}

以上,就可以單獨部署配置中心,配置信息值需要git提交到指定的目錄,微服務各個獨立的服務應用都能獲取。

附上源碼: https://github.com/jarvisqi/spring-cloud-microservice.git


分享到:


相關文章: