Zookeeper
1. 前置條件
- 瞭解 Dubbo 基礎開發步驟
- 安裝並啟動 Zookeeper
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 節點結構
流程
- 當服務提供者啟動時:將自身的 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="*" />
,可以訂閱所有群組的服務和所有版本的提供者