天天看點

Zookeeper在Dubbo中的應用

轉自 

https://yq.aliyun.com/articles/38274

摘要: Zookeeper在Dubbo中的應用 Dubbo的架構 節點角色說明: Provider: 暴露服務的服務提供方。Consumer: 調用遠端服務的服務消費方。Registry: 服務注冊與發現的注冊中心。

Zookeeper在Dubbo中的應用

Dubbo的架構

Zookeeper在Dubbo中的應用

節點角色說明:

Provider: 暴露服務的服務提供方。

Consumer: 調用遠端服務的服務消費方。

Registry: 服務注冊與發現的注冊中心。

Monitor: 統計服務的調用次調和調用時間的監控中心。

Container: 服務運作容器。

調用關系說明:

0. 服務容器負責啟動,加載,運作服務提供者。

1. 服務提供者在啟動時,向注冊中心注冊自己提供的服務。

2. 服務消費者在啟動時,向注冊中心訂閱自己所需的服務。

3. 注冊中心傳回服務提供者位址清單給消費者,如果有變更,注冊中心将基于長連接配接推送變更資料給消費者。

4. 服務消費者,從提供者位址清單中,基于軟負載均衡算法,選一台提供者進行調用,如果調用失敗,再選另一台調用。

5. 服務消費者和提供者,在記憶體中累計調用次數和調用時間,定時每分鐘發送一次統計資料到監控中心。

Dubbo推薦使用Zookeeper注冊中心

Zookeeper在Dubbo中的應用

流程說明:

服務提供者啟動時

向/dubbo/com.foo.BarService/providers目錄下寫入自己的URL位址。

服務消費者啟動時

訂閱/dubbo/com.foo.BarService/providers目錄下的提供者URL位址。

并向/dubbo/com.foo.BarService/consumers目錄下寫入自己的URL位址。

監控中心啟動時

訂閱/dubbo/com.foo.BarService目錄下的所有提供者和消費者URL位址。

支援以下功能:

當提供者出現斷電等異常停機時,注冊中心能自動删除提供者資訊。

當注冊中心重新開機時,能自動恢複注冊資料,以及訂閱請求。

當會話過期時,能自動恢複注冊資料,以及訂閱請求。

當設定<dubbo:registry check="false" />時,記錄失敗注冊和訂閱請求,背景定時重試。

可通過<dubbo:registry username="admin" password="1234" />設定zookeeper登入資訊。

可通過<dubbo:registry group="dubbo" />設定zookeeper的根節點,不設定将使用無根樹。

支援*号通配符<dubbo:reference group="*" version="*" />,可訂閱服務的所有分組和所有版本的提供者。

在provider和consumer中增加zookeeper用戶端jar包依賴:

1 2 3 4 5

<

dependency

>

<

groupId

>org.apache.zookeeper</

groupId

>

<

artifactId

>zookeeper</

artifactId

>

<

version

>3.3.3</

version

>

</

dependency

>

  

或直接下載下傳:http://repo1.maven.org/maven2/org/apache/zookeeper/zookeeper

zkclient用戶端實作:

ZKClient Zookeeper Registry

從2.2.0版本開始預設為zkclient實作,以提升zookeeper用戶端的健狀性。

ZKClient是Datameer開源的一個Zookeeper用戶端實作,開源比較早,參見:https://github.com/sgroschupf/zkclient

預設配置:

<dubbo:registry ... client="zkclient" />

或:

dubbo.registry.client=zkclient

或:

zookeeper://10.20.153.10:2181?client=zkclient

需依賴:

1 2 3 4 5

<

dependency

>

<

groupId

>com.github.sgroschupf</

groupId

>

<

artifactId

>zkclient</

artifactId

>

<

version

>0.1</

version

>

</

dependency

>

  

或直接下載下傳:http://repo1.maven.org/maven2/com/github/sgroschupf/zkclient

Zookeeper單機配置:

1 2 3

<

dubbo:registry

address="zookeeper://10.20.153.10:2181" />

Or:

<

dubbo:registry

protocol="zookeeper" address="10.20.153.10:2181" />

  

Zookeeper叢集配置:

1 2 3

<

dubbo:registry

address="zookeeper://10.20.153.10:2181?backup=10.20.153.11:2181,10.20.153.12:2181" />

Or:

<

dubbo:registry

protocol="zookeeper" address="10.20.153.10:2181,10.20.153.11:2181,10.20.153.12:2181" />

  

同一Zookeeper,分成多組注冊中心:

1 2

<

dubbo:registry

id="chinaRegistry" protocol="zookeeper" address="10.20.153.10:2181" group="china" />

<

dubbo:registry

id="intlRegistry" protocol="zookeeper" address="10.20.153.10:2181" group="intl" />