『網際網路架構』軟體架構-zookeeper之curator詳解(36)
為了更好的實現java操作zookeeper伺服器,後來出現Curator框架,非常的強大,目前已經是apache的頂級專案,裡面提供了更多豐富的操作。例如:session超時重連,主從選舉,分散式計數器,分散式鎖等適用於各種複雜的zookeeper場景的API封裝。
原始碼:https://github.com/limingios/netFuture/原始碼/『網際網路架構』軟體架構-zookeeper之curator詳解(36)
官方原始碼
http://curator.apache.org/
這個跟zkclient的區別是,zkclient就類似mybatis,curator類似hibernate。
- maven依賴
<dependency> <groupId>org.apache.curator</groupId> 基礎框架 <artifactId>curator-framework</artifactId> <version></version> </dependency> <dependency> <groupId>org.apache.curator</groupId> <artifactId>curator-recipes</artifactId> 功能 jar 分散式鎖、佇列等 <version></version> </dependency> <dependency> 客戶端重試策略 <groupId>org.apache.curator</groupId> <artifactId>curator-client</artifactId> <version></version> </dependency>
- 使用
Curator 框架提供了一種流式介面,通過 builder 串起來,傳遞引數都是調方法。
Curator 框架通過 CuratorFrameworkFactory 以工廠模式和 builder 模式建立
CuratorFramework 例項。 CuratorFramework 例項都是執行緒安全的,你應該在你的應用中共享同一個。
工廠方法 newClient()提供了一個簡單方式建立例項。 而 Builder 提供了更多的引數控制。
一旦你建立了一個 CuratorFramework 例項,你必須呼叫它的 start()啟動,在應用退出時呼叫 close()方法關閉。
- 建立 Curator 連線例項
注意:一個 Zookeeper 叢集只需要構造一個 CuratorFramework 例項物件即可。CuratorFramework 使用之前必須先呼叫client.start();
String address = "localhost:2181"; CuratorFrameworkclient=CuratorFrameworkFactory.newClient(address,new ExponentialBackoffRetry(1000, 3));//重試機制 client.start()
-
CuratorFramework
>提供的方法
介面類 | 註冊監聽方法 |
---|---|
方法名 | 描述 |
create | 開始建立操作, 可以呼叫額外的方法(比如方式 mode 或者後臺執行background) 並在最後呼叫 forPath()指定要操作的 ZNode |
Delete | 開始刪除操作. 可以呼叫額外的方法(版本或者後臺處理 version or background)並在最後呼叫 forPath()指定要操作的 ZNode |
checkExists | 開始檢查 ZNode 是否存在的操作. 可以呼叫額外的方法(監控或者後臺處理)並在最後呼叫 forPath()指定要操作的 ZNode |
getData | 開始獲得 ZNode 節點資料的操作. 可以呼叫額外的方法(監控、後臺處理或者獲取狀態 watch, background or get stat) 並在最後呼叫 forPath()指定要操作的 ZNode |
setData | 開始設定 ZNode 節點資料的操作. 可以呼叫額外的方法(版本或者後臺處 理) 並在最後呼叫 forPath()指定要操作的 ZNode |
getChildren | 開始獲得 ZNode 的子節點列表。 以呼叫額外的方法(監控、後臺處理或者獲取狀態 watch, background or get stat) 並在最後呼叫 forPath()指定要操作的 ZNode |
inTransaction | 開始是原子 ZooKeeper 事務. 可以複合 create, setData, check, and/ordelete 等操作然後呼叫 commit()作為一個原子操作提交 |
事件型別以及事件的方法
Event Type | Event Methods |
---|---|
CREATE | getResultCode() and getPath() |
DELETE | getResultCode() and getPath() |
EXISTS | getResultCode(), getPath() and getStat() |
GETDATA | getResultCode(), getPath(), getStat() and getData() |
SETDATA | getResultCode(), getPath() and getStat() |
CHILDREN | getResultCode(), getPath(), getStat(),getChildren() |
WATCHED | getWatchedEvent |
監聽器
Curator 提供了三種 Watcher(Cache)來監聽結點的變化:
* Path Cache
監視一個路徑下子結點的建立、刪除,以及結點資料的更新。產生的事件會傳遞給註冊的 PathChildrenCacheListener。
- Node Cache
監視一個結點的建立、更新、刪除,並將結點的資料快取在本地。
- Tree Cache
Path Cache 和 Node Cache 的“合體”,監視路徑下的建立、更新、刪除事件,並快取路徑下所有子結點的資料。
重試機制
Curator 內部實現的幾種重試策略:
- ExponentialBackoffRetry:重試指定的次數, 且每一次重試之間停頓的時間逐漸增加.
- RetryNTimes:指定最大重試次數的重試策略
- RetryOneTime:僅重試一次
- RetryUntilElapsed:一直重試直到達到規定的時間
分散式鎖
maven引入.用分散式鎖或者原子操作、佇列等功能需引入
<dependency> <groupId>org.apache.curator</groupId> <artifactId>curator-recipes</artifactId> <version>${version}</version> </dependency>
PS:只是個工具,apache的頂級專案,可以通過原始碼來學習。在文章上邊提供了原始碼。
>>原創文章,歡迎轉載。轉載請註明:轉載自IT人故事會,謝謝!
>>原文連結地址:上一篇:已是最新文章