天天看點

springcloud實戰篇十之 springcloud-config 分布式配置中心

一、簡介

在分布式系統中,由于獨立的微服務數量很多,為了友善服務配置檔案統一管理,并實作不重新開機服務自動重新整理配置,實時更新,是以需要分布式配置中心元件。在Spring Cloud中,有分布式配置中心元件spring cloud config,支援配置服務放在配置服務的記憶體中(即本地),也支援放在遠端Git倉庫中。在spring cloud config 元件中,分兩個角色,它是屬于CS架構 ,一是config server,二是config client。

SpringCloudConfig

就是我們通常意義上的配置中心,把應用原本放在本地檔案的配置抽取出來放在中心伺服器,進而能夠提供更好的管理、釋出能力。

SpringCloudConfig

分服務端和用戶端,服務端負責将

git或者svn

中存儲的配置檔案釋出成

REST

接口,用戶端可以從服務端REST接口擷取配置。但用戶端并不能主動感覺到配置的變化,進而主動去擷取新的配置,這需要每個用戶端通過

POST

方法觸發各自的

/refresh

SpringCloudBus

通過一個輕量級消息代理連接配接分布式系統的節點。這可以用于廣播狀态更改(如配置更改)或其他管理指令。

SpringCloudBus

提供了通過

POST

方法通路的

endpoint/bus/refresh

,這個接口通常由

git

的鈎子功能調用,用以通知各個

SpringCloudConfig

的用戶端去服務端更新配置。

注意:這是工作的流程圖,實際的部署中

SpringCloudBus

并不是一個獨立存在的服務,這裡單列出來是為了能清晰的顯示出工作流程。

springcloud實戰篇十之 springcloud-config 分布式配置中心

spring cloud 配置服務同時提供了git和svn兩種方式,下面是一個使用git的示例。

一.建立一個SpingCloud-config-Server

springcloud實戰篇十之 springcloud-config 分布式配置中心

1.pom.xml檔案

<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>
	<parent>
		<groupId>com.yxf.springcloud</groupId>
		<artifactId>mymicroservicecloud</artifactId>
		<version>0.0.1-SNAPSHOT</version>
	</parent>
	<artifactId>mymicroservicecloud-config-3344</artifactId>

	<dependencies>
		<!-- springCloud Config -->
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-config-server</artifactId>
		</dependency>
		<!-- 避免Config的Git插件報錯:org/eclipse/jgit/api/TransportConfigCallback -->
		<!-- https://mvnrepository.com/artifact/org.eclipse.jgit/org.eclipse.jgit -->
		<dependency>
			<groupId>org.eclipse.jgit</groupId>
			<artifactId>org.eclipse.jgit</artifactId>
			<version>4.10.0.201712302008-r</version>
		</dependency>

		<!-- 圖形化監控 -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-actuator</artifactId>
		</dependency>
		<!-- 熔斷 -->
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-hystrix</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-eureka</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-config</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-jetty</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
		</dependency>
		<!-- 熱部署插件 -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>springloaded</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-devtools</artifactId>
		</dependency>
	</dependencies>
</project>
           

2.項目啟動類

package com.atguigu.springcloud;

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

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

3.application.yml

server: 
  port: 6688 
  
spring:
  application:
    name:  microservicecloud-config
  cloud:
    config:
      server:
        git:
          uri: http://192.168.0.132/yxs/microservicecloud-config.git 
 

           

二.建立一個Eureka-config-client(單獨建立一個工程僅為讀取配置檔案)

springcloud實戰篇十之 springcloud-config 分布式配置中心

1.pom.xml

<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>
  <parent>
    <groupId>com.yxf.springcloud</groupId>
    <artifactId>mymicroservicecloud</artifactId>
    <version>0.0.1-SNAPSHOT</version>
  </parent>
  <artifactId>mymicroservicecloud-config-client-3355</artifactId>
  
  <dependencies>
		<!-- SpringCloud Config用戶端 -->
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-config</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-actuator</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-hystrix</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-eureka</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-config</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-jetty</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>springloaded</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-devtools</artifactId>
		</dependency>
	</dependencies>
</project>
           

2.項目啟動類

package com.yxf.springcloud;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

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

           

3.application.yml(應用程式特有配置資訊,可以用來配置後續各個子產品中需使用的公共參數等。)

spring:
  application:
    name: microservicecloud-config-client
           

4.bootstap.yml(用來程式引導時執行,應用于更加早期配置資訊讀取,如可以使用來配置application.yml中使用到參數等)

spring:
  cloud:
    config:
      name: microservicecloud-config-client 
      profile: test   #本次通路的配置項
      label: master   
      uri: http://127.0.0.1:6688  #本微服務啟動後先去找6688号服務,通過SpringCloudConfig擷取Git的服務位址
 
           

測試效果

springcloud實戰篇十之 springcloud-config 分布式配置中心