Zookeeper

Zookeeper 註冊中心的基礎用法和工作原理。

1. 前置條件

2. 使用說明

在此處查看 完整的範例程式碼

2.1. 新增 Maven 依賴

<properties>
    <dubbo.version>3.0.8</dubbo.version>
</properties>

<dependencies>
    <dependency>
        <groupId>org.apache.dubbo</groupId>
        <artifactId>dubbo</artifactId>
        <version>${dubbo.version}</version>
    </dependency>
    <!-- This dependency helps to introduce Curator and Zookeeper dependencies that are necessary for Dubbo to work with zookeeper as transitive dependencies -->
    <dependency>
        <groupId>org.apache.dubbo</groupId>
        <artifactId>dubbo-dependencies-zookeeper</artifactId>
        <version>${dubbo.version}</version>
        <type>pom</type>
    </dependency>
</dependencies>

dubbo-dependencies-zookeeper 會自動將 Zookeeper 相關的客戶端依賴新增至應用程式中,降低使用者使用 Zookeeper 的成本。如果在使用過程中出現版本相容性問題,使用者也可以自行新增,而無需使用 dubbo-dependencies-zookeeper Curator、Zookeeper Client 等依賴。

由於 Dubbo 使用 Curator 作為與 Zookeeper Server 互動的程式設計客戶端,因此需要特別注意 Zookeeper Server 與 Dubbo 版本依賴之間的相容性

Zookeeper Server 版本Dubbo 版本Dubbo Zookeeper 依賴套件說明
3.4.x 及以下版本3.0.x 及以上版本dubbo-dependencies-zookeeper傳遞依賴 Curator 4.x、Zookeeper 3.4.x
3.5.x 及以上版本3.0.x 及以上版本dubbo-dependencies-zookeeper-curator5傳遞依賴 Curator 5.x、Zookeeper 3.7.x
3.4.x 及以上版本2.7.x 及以下版本dubbo-dependencies-zookeeper傳遞依賴 Curator 4.x、Zookeeper 3.4.x
3.5.x 及以上版本2.7.x 及以下版本需要新增 Curator、Zookeeper 等相關客戶端依賴

2.2. 配置並啟用 Zookeeper

# application.yml
dubbo
 registry
   address: zookeeper://localhost:2181

或者

# dubbo.properties
dubbo.registry.address=zookeeper://localhost:2181

或者

<dubbo:registry address="zookeeper://localhost:2181" />

address 是啟用 Zookeeper 註冊中心的唯一必填屬性,在生產環境中,address 通常指定為叢集地址,例如:

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

也可以將 protocol 和 address 分開配置,例如:

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

3 進階設定

3.1 認證與授權

如果 Zookeeper 啟用了認證,Dubbo 支援透過指定 username 和 password 來傳遞身份。

# application.yml
dubbo
 registry
   address: zookeeper://localhost:2181
   username: hello
   password: 1234

您也可以直接在 address 上擴展參數 address=zookeeper://hello:1234@localhost:2181

3.2 群組隔離

透過指定 group 屬性,可以在同一個 Zookeeper 叢集中實現微服務地址的邏輯隔離。例如,可以在一個叢集中隔離多套開發環境,並在地址發現層級實現隔離。

# application.yml
dubbo
 registry
   address: zookeeper://localhost:2181
   group: daily1

3.3 其他擴展設定

設定連線和工作階段逾時

# application.yml
dubbo
 registry
   address: zookeeper://localhost:2181
   timeout: 30 * 1000* # Connection timeout, default 30s
   session: 60 * 1000* # Session timeout, default 60s

Zookeeper 註冊中心還支援一些其他的控制參數,詳情請參閱 註冊中心設定項目手冊

4 運作方式

4.1 Dubbo2 節點結構

/user-guide/images/zookeeper.jpg

流程

  • 當服務提供者啟動時:將自身的 URL 地址寫入 /dubbo/com.foo.BarService/providers 目錄。
  • 當服務消費者啟動時:訂閱 /dubbo/com.foo.BarService/providers 目錄下的提供者 URL 地址。並將自身的 URL 地址寫入 /dubbo/com.foo.BarService/consumers 目錄
  • 當監控中心啟動時:訂閱 /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="*" />,可以訂閱所有群組的服務和所有版本的提供者

4.2 Dubbo3 節點結構


最後修改日期:2023 年 1 月 2 日:增強英文文件 (#1798) (95a9f4f6c1c)