1. 程式人生 > >用Zookeeper作為Spring cloud的配置中心(轉)

用Zookeeper作為Spring cloud的配置中心(轉)

本文轉自https://blog.csdn.net/CSDN_Stephen/article/details/78856323

Spring Cloud 配置中心的主流實現方式

Spring cloud config
Spring cloud zookeeper config
以下是這兩者的簡介

Srping Cloud Config

Spring cloud config就是和git(svn)整合來實現配置中心。Spring cloud config分服務端、客戶端和git(svn)三部分,服務端負責將Git(SVN)中儲存的配置檔案釋出成REST介面,客戶端可以從服務端REST介面獲取配置(但客戶端並不能主動感知到配置的變化,從而主動去獲取新的配置,這需要每個客戶端通過POST方法觸發各自的/refresh)。其中通過git本身的屬性可以達到配置版本控制的目的。有快取形式,先把config下載到服務端本地再提供給客戶端,提高可靠性。

Srping Cloud Zookeeper Config

該專案通過自動配置並繫結到Spring環境,為Spring Boot應用程式提供Zookeeper整合。Zookeeper提供了一個分層名稱空間,允許客戶端儲存任意資料,如配置資料。Spring Cloud Zookeeper Config是Config Server和Client的替代方案。

兩者的比較
Spring Cloud Config 通過檔案系統,git/svn倉庫來管理配置檔案。包含客戶端、服務端和git/svn倉庫。通過git/svn特性可以達到版本控制

Spring Cloud Zookeeper Config 通過Zookeeper分級名稱空間來儲存配置項資料,另外Zookeeper可以實時監聽節點變化和通知機制。

Spring Cloud Zookeeper Config 主要分為兩部分,client端和zookeeper,client端內嵌在spring-cloud-starter-zookeeper-config中,用的是netflix開源的CuratorFramework 來連線zookeeper獲取配置資料。在微服務啟動時候載入到environment中。

如何使用Spring Cloud Zookeeper Config

1、在客戶端(呼叫方)pom.xml中加入以下依賴

<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zookeeper-config</artifactId>
</dependency>

2、在客戶端配置檔案bootstrap.yml / bootstrap.properties中加入zookeeper連線資訊

spring:
application:
name: testApp
cloud:
zookeeper:
enabled: true # true:開啟zookeeper外部化配置, false:讀取本地配置;
connect-string: IP1:port1,IP2:port2,IP3:port3
config:
root: /config/dev
enabled: true
watcher:
enabled: false

屬性詳解:
connect-string:ZooKeeper的地址,如果是叢集,逗號分隔節點,格式:ip:port[,ip2:port2,.....]
root:指定zookeeper中,屬性的根目錄
spring.application.name: 定義你的專案的名稱,zk會在你指定的根目錄下尋找以這個專案名命名的目錄下的配置
watcher.enabled: 預設值是true, 監控配置變更後是否自動更新,需配合Spring Boot Actuators 使用

3、匯入配置檔案到Zookeeper

3.1、屬性命名規則(假設你在上面的root配置項設定為/config/dev):

/config/dev/{application-name},{profile}={key}={value}

服務名和dev (profile名)以逗號隔開,可以設定spring.cloud.zookeeper.config.profile-separator 來用其他符號隔開,譬如”-”等

3.2、配置檔案例子:
testApp-dev.txt

/config/dev/testApp,dev=server.port=8080

3.3、使用ZKUI來視覺化管理Zookeeper,登入ZKUI->import 選擇對應檔案匯入即可。
ZKUI安裝使用請自行百度。

4、客戶端獲取配置方式
我瞭解到有三種,可能還有其他的,大家可以自行百度
4.1、通過@Value註解

@Value("${db.url}")
String dbUrl;

4.2、配置檔案(xml)中直接使用(用${propertyName})

<bean id="globalDbConfig" class="com.demo.connector.GlobalDbConfig">
<property name="globalDbUsername" value="${global.username}"/>
<property name="globalDbPassword" value="${global.password}"/>
</bean>

如何讓客戶端自動更新zookeeper變更的配置

1、客戶端pom.xml新增如下依賴

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

2、在bootstrap.yml/bootstrap.properties 配置檔案中開啟watcher

spring.cloud.zookeeper.config.watcher.enabled=true

3、Bean上新增@RefreshScope註解

配置讀取簡介

配置資訊在服務啟動時載入到Spring Environment中。配置資訊預設存放在/config名稱空間下。
例如,應用名為“testApp”,環境“dev”,則下列配置源會被建立:
- config/testApp,dev
- config/testApp
- config/application,dev
- config/application
最為具體的配置源放在最上面,最泛化的放在最下面。config/application名稱空間下的屬性會被用於所有應用。config/testApp名稱空間下的屬性只會被“testApp”服務的例項使用,其他服務不能使用。

配置優先順序

遠端配置(zookeeper等) > 命令列引數配置 > application.yml> bootstrap.yml