Zookeeper 是 Apacahe Hadoop 的子項目,是一個樹型的目錄服務,支援變更推送,适合作為 Dubbo 服務的注冊中心,工業強度較高,可用于生産環境,并推薦使用。
流程說明:
- 服務提供者啟動時: 向
目錄下寫入自己的 URL 位址;/dubbo/com.foo.BarService/providers
- 服務消費者啟動時: 訂閱
目錄下的提供者 URL 位址。并向/dubbo/com.foo.BarService/providers
目錄下寫入自己的 URL 位址;/dubbo/com.foo.BarService/consumers
- 監控中心啟動時: 訂閱
目錄下的所有提供者和消費者 URL 位址。/dubbo/com.foo.BarService
支援以下功能:
- 當提供者出現斷電等異常停機時,注冊中心能自動删除提供者資訊;
- 當注冊中心重新開機時,能自動恢複注冊資料,以及訂閱請求;
- 當會話過期時,能自動恢複注冊資料,以及訂閱請求;
- 當設定
時,記錄失敗注冊和訂閱請求,背景定時重試;<dubbo:registry check="false" />
- 可通過
設定 zookeeper 登入資訊;<dubbo:registry username="admin" password="1234" />
- 可通過
設定 zookeeper 的根節點,不設定将使用無根樹;<dubbo:registry group="dubbo" />
- 支援 * 号通配符
,可訂閱服務的所有分組和所有版本的提供者。<dubbo:reference group="*" version="*" />
使用
在 provider 和 consumer 中增加 zookeeper 用戶端 jar 包依賴:
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.4.11</version>
<type>pom</type>
</dependency>
或直接下載下傳。
Dubbo 支援 zkclient 和 curator 兩種 Zookeeper 用戶端實作:
使用 zkclient 用戶端
從 2.2.0 版本開始預設為 zkclient 實作,以提升 zookeeper 用戶端的健狀性。zkclient 是 Datameer 開源的一個 Zookeeper 用戶端實作。
預設配置:
或:
dubbo.registry.client=zkclient
或:
需依賴或直接下載下傳:
<dependency>
<groupId>com.github.sgroschupf</groupId>
<artifactId>zkclient</artifactId>
<version>0.1</version>
</dependency>
使用 curator 用戶端
從 2.3.0 版本開始支援可選 curator 實作。Curator 是 Netflix 開源的一個 Zookeeper 用戶端實作。
如果需要改為 curator 實作,請配置:
<dubbo:registry ... client="curator" />
或:
dubbo.registry.client=curator
或:
需依賴或直接下載下傳:
<dependency>
<groupId>com.netflix.curator</groupId>
<artifactId>curator-framework</artifactId>
<version>1.1.10</version>
</dependency>
Zookeeper 單機配置:
或:
Zookeeper 叢集配置:
或:
同一 Zookeeper,分成多組注冊中心:
<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" />
zookeeper 安裝
安裝方式參見: Zookeeper安裝手冊,隻需搭一個原生的 Zookeeper 伺服器,并将 Provider 和 Consumer 裡的
conf/dubbo.properties
中的
dubbo.registry.addrss
的值改為 zookeeper://127.0.0.1:2181 即可使用。