1. 程式人生 > >Spring Cloud系列(二十九)高可用配置中心—Finchley版本

Spring Cloud系列(二十九)高可用配置中心—Finchley版本

傳統作法

通常在生產環境,Config Server與服務註冊中心一樣,我們也需要將其擴充套件為高可用的叢集。在之前實現的config-server基礎上來實現高可用非常簡單,不需要我們為這些服務端做任何額外的配置,只需要遵守一個配置規則:將所有的Config Server都指向同一個Git倉庫,這樣所有的配置內容就通過統一的共享檔案系統來維護,而客戶端在指定Config Server位置時,只要配置Config Server外的均衡負載即可,就像如下圖所示的結構:

註冊為服務

雖然通過服務端負載均衡已經能夠實現,但是作為架構內的配置管理,本身其實也是可以看作架構中的一個微服務。所以,另外一種方式更為簡單的方法就是把config-server也註冊為服務,這樣所有客戶端就能以服務的方式進行訪問。通過這種方法,只需要啟動多個指向同一Git倉庫位置的config-server就能實現高可用了。

配置過程也非常簡單,具體如下:

config-server配置

  • 在pom.xml的dependencies節點中引入如下依賴,相比之前的config-server就,加入了spring-cloud-starter-netflix-eureka-client,用來註冊服務
<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
  • 在application.properties中配置引數eureka.client.serviceUrl.defaultZone以指定服務註冊中心的位置,詳細內容如下:
eureka:
  client:
    service-url:
      defaultZone: http://localhost:1111/eureka/ 
  • 在應用主類中,新增@EnableDiscoveryClient註解,用來將config-server註冊到上面配置的服務註冊中心上去。
@EnableDiscoveryClient
@EnableConfigServer
@SpringBootApplication
public class Application {

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

啟動該應用,並訪問http://localhost:1111/,可以在Eureka Server的資訊面板中看到config-server已經被註冊了。

config-client配置

  • 同config-server一樣,在pom.xml的dependencies節點中新增spring-cloud-starter-netflix-eureka-client依賴,用來註冊服務:
<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
  • 在bootstrap.properties中,按如下配置:
spring:
  application:
    name: repo #要獲取的應用名
  cloud:
    config:
      uri: http://localhost:5666/ # 配置服務中心的地址
      label: master #要獲取的分支名
      profile: dev  #要獲取的環境名
      discovery:
        enabled: true
        service-id: config-server
eureka:
  client:
    service-url:
      defaultZone: http://localhost:1111/eureka/ 

其中,通過eureka.client.serviceUrl.defaultZone引數指定服務註冊中心,用於服務的註冊與發現,再將spring.cloud.config.discovery.enabled引數設定為true,開啟通過服務來訪問Config Server的功能,最後利用spring.cloud.config.discovery.serviceId引數來指定Config Server註冊的服務名。這裡的spring.application.name和spring.cloud.config.profile如之前通過URI的方式訪問時候一樣,用來定位Git中的資源。

  • 在應用主類中,增加@EnableDiscoveryClient註解,用來發現config-server服務,利用其來載入應用配置
@EnableDiscoveryClient
@SpringBootApplication
public class Application {

	public static void main(String[] args) {
		SpringApplication.run(Application.class, args);
	}
}
  • 沿用之前我們建立的Controller來載入Git中的配置資訊,程式碼就不貼了。

完成了上述配置之後,我們啟動該客戶端應用。若啟動成功,訪問http://localhost:1111/,可以在Eureka Server的資訊面板中看到該應用已經被註冊成功了。

訪問客戶端應用提供的服務:http://localhost:5777/test1,此時,我們會返回在Git倉庫中repoe-dev.properties檔案配置的from屬性內容:”git-dev-1.0-update”。

這是簡單實現了配置中心的高可用,但是並沒有解決真正會遇到的問題,比如Git無法訪問後會導致配置中心全部掛掉,最終整個系統癱瘓。所以真正解決配置中心高可用可以參考這篇文章:Spring Cloud Config 客戶端的高可用實現