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 客戶端的高可用實現