SpringCloud 學習筆記9--SpringCloud 分佈式配置中心

摘自:螞蟻課堂學習視頻:http://www.mayikt.com/course/video/2399

1、分佈式配置中心設計思想

      (1)爲什麼要使用分佈式配置中心?

            產生背景:傳統的如果生產環境配置文件,需要發生改變,則需要重新打war,重新讀取配置信息到jvm中。

       (2)分佈式配置中心

            在微服務當中使用同一個服務器管理所有服務配置文件信息,能夠實現後臺可管理,當服務器正在運行的時候,如果【配置文件需要發生改變,可以實現不需要重啓服務器實時更改配置文件信息。      

       (3)SpringCloud  Config分佈式配置中心原理

                 1)分佈式配置中心所需組件:

                    · Web管理系統:後臺可以使用圖形界面管理配置文件(SpringCloud  Config沒有圖形界面)。

                    · 存放分佈式配置文件服務器(持久存儲服務器):使用版本控制器存放配置文件信息,使用git環境。

                    · ConfigServer緩存配置文件服務器(臨時緩存存放)。

                    · ConfigClient讀取ConfigServer配置文件信息。

                 2)用戶提交修改的配置文件信息到 Git/SVN服務器,然後由ConfigServer服務器去Git/SVN上去獲取相關的配置文件信息放到緩存中,最後客戶端去獲取ConfigServer配置文件信息。

2、常見分佈式配置中心框架對比

       1)攜程的阿波羅,有圖形界面可管理配置文件信息,配置文件存放在數據庫。

       2)SpringCloud Config 沒有後臺可管理分佈式配置中逆行,配置文件信息存放在版本控制器中的(git、svn)。

       3)Zookeeper實現分佈式配置中心,持久節點 + 事件通知。

3、搭建Git環境存儲配置文件(碼雲)

          註冊git賬號,登錄,創建倉庫,然後創建文件夾,創建文件,不多贅述,git操作不會的百度吧。效果如圖,我這裏創建了兩個配置文件,用於測試。

4、搭建ConfigServer配置文件中心

    (1)配置中心基於eureka註冊中心,首先搭建eureka註冊中心並啓動,這裏不做說明,

              前面文章有搭建eureka註冊中心教程。連接如下:https://mp.csdn.net/postedit/103246697

    (2)搭建ConfigServer分佈式配置中心

              1、創建maven工程,引入下面的jar:

<dependencies>
  <!-- springcloud整合config-server -->
  	<dependency>
  		<groupId>org.springframework.cloud</groupId>
  		<artifactId>spring-cloud-config-server</artifactId>
  	</dependency>
  	<!-- springcloud eureka-server -->
  	<dependency>
  		<groupId>org.springframework.cloud</groupId>
  		<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
  	</dependency>
  </dependencies>

      2、properties或yml配置文件配置如下:

##服務端口
server.port=8888
##註冊地址
eureka.client.serviceUrl.defaultZone=http://localhost:8100/eureka
##服務名稱
spring.application.name=config-server
##config-server讀取git環境地址
spring.cloud.config.server.git.uri=https://gitee.com/gong_hua/springcloud1
##讀取分支環境
spring.cloud.config.server.git.search-paths=config
spring.cloud.config.label=master

3、創建啓動類:

package com.gonghua;

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

@SpringBootApplication
@EnableEurekaClient
@EnableConfigServer
public class AppConfigServer {
	//@EnableConfigServer 開啓ConfigServer服務器端
	/**
	 * git環境上創建配置文件名稱規範:服務名稱-環境.properties
	 * @param args
	 */
	public static void main(String[] args) {
		SpringApplication.run(AppConfigServer.class, args);
	}

}

4、啓動eureka註冊中心,啓動配置中心,瀏覽器訪問,效果如下:

     

 

5、ConfigClient讀取ConfigServer配置文件信息

    引入pom依賴:

 <!-- springboot整合web端 -->
 	 <dependency>
  		<groupId>org.springframework.boot</groupId>
  		<artifactId>spring-boot-starter-web</artifactId>
  	</dependency>
  <!-- springcloud整合config-client -->
  	<dependency>
  		<groupId>org.springframework.cloud</groupId>
  		<artifactId>spring-cloud-config-client</artifactId>
  	</dependency>
  	<!-- springcloud eureka-server -->
  	<dependency>
  		<groupId>org.springframework.cloud</groupId>
  		<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
  	</dependency>

配置properties或yml文件:

##服務端口
server.port=8889
##註冊地址
eureka.client.serviceUrl.defaultZone=http://localhost:8100/eureka
##服務名稱(注意:這個地方的name一定要和你的版本控制器中的文件前的服務名稱一致,我的git上創建的文件都是test-configClient開頭的)
spring.application.name=test-configClient
##讀取版本環境(這裏是開發環境或生產環境   git上的文件名稱格式:服務名稱-版本環境.properties)
spring.cloud.config.profile=dev
##讀取分佈式配置中心的服務名稱
spring.cloud.config.discovery.service-id=config-server
##開啓讀取權限
spring.cloud.config.discovery.enabled=true

 添加測試類和啓動類

(1)測試類:


@RestController
public class TestController {
	@Value("${myselfInfo}")
	private  String myselfInfo;
	
	@RequestMapping("/getFileInfo")
	public String getFileInfo(){
		return myselfInfo;
	}

}





(2)啓動類:


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

啓動服務,訪問如下:

       

 

6、SpringCloudConfig實時刷新配置文件

         默認情況下,更改git或svn上的配置文件後,是不能實時讀取到的,要想讀到更改後的內容,傳統方式如下:

            (1)重啓client端服務器;  (2)建立定時任務,定時去讀取; 

        springcloud分佈式配置中心,可以採用手動刷新或者自動刷新:這二者都不需要重啓服務。

               手動刷新:需要人工調用接口,讀取最新配置文件(actuator監控中心)。

               自動刷新:消息總線進行實時通知(springbus)。 (缺點:對性能不是很好) 

  手動刷新相關配置:

   (1)客戶端的pom.xml添加actuator依賴:

<!-- 監控中心 -->
  	<dependency>
  		<groupId>org.springframework.boot</groupId>
  		<artifactId>spring-boot-starter-actuator</artifactId>
  	</dependency>

(2)application.properties開啓所有斷點的監控

##開啓所有斷點的監控
management.endpoints.web.exposure.include=*

(3)對應的類上添加@RefreshScope註解。

(4)修改git上的配置文件的內容後,這個時候不需要重啓服務器,只需要手動調用actuator的刷新接口(注意是post請求)。

    接口地址:http://127.0.0.1:8889/actuator/refresh  作用:重新讀取git服務器上的文件內容,並緩存到內存中去。

   然後調用讀取配置文件的接口,這個時候就是讀取的最新的配置文件的內容。如下圖:

修改前:   請求結果:

 

--------------------------------------------------------

修改後:          刷新:

-------------------------

刷新後的請求的結果:

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