Zookeeper之Curator(1)客戶端基本的創建,刪除,更新,查找操作api


Curator Framework提供了簡化使用zookeeper更高級的API接口。它包涵很多優秀的特性,主要包括以下三點:

  1. 自動連接管理:自動處理zookeeper的連接和重試存在一些潛在的問題;可以watch NodeDataChanged event和獲取updateServerList;Watches可以自動被Cruator recipes刪除;
  2. 更干凈的API:簡化raw zookeeper方法,事件等;提供現代流式API接口
  3. Recipe實現:leader選舉,分布式鎖,path緩存,和watcher,分布式隊列等。

Zookeeper在實際生產環境中應用比較廣泛,比如SOA的服務監控系統,Hadoop,spark的分布式調度系統。Curator框架提供的優秀特性可以使得我們更加便捷的開發zookeeper應用。本文主要講解了curator的基本使用方法。

CuratorFramework實例創建

Curator框架通過CuratorFrameworkFactory以工廠模式和builder模式創建CuratorFramework實 例。 CuratorFramework實例都是線程安全的,我們應該當在ZooKeeper Cluster中共享同一個CuratorFramework實例。工廠方法newClient() 提供了簡便創建client實例方式,使用start和close方法啟動和關閉客戶端。使用Curator框架創建客戶端代碼如下,

RetryPolicy retryPolicy = new ExponentialBackoffRetry(1000, 3); CuratorFramework newClient=CuratorFrameworkFactory.newClient("localhost:2181", retryPolicy);

操作數據節點

zookeeper中,節點的組織類似於linux的文件系統,使用path來標識每個節點(znode),znode作為保存數據的容器,數據量限制在1M以內,這部分介紹如何使用curator框架創建,獲取,更新,以及刪除節點。

創建節點

Curator創建znode節點代碼如下所示:

public void createNode(CuratorFramework newClient, String path, CreateMode createMode, String data) { try { newClient.create().withMode(createMode).forPath(path, data.getBytes()); } catch (Exception e) { System.out.println("創建節點失敗, elog=" + e.getMessage()); } }

zookeeper中節點有兩種類型,臨時節點和永久節點,CreateMode類用於指定創建節點的類型,用戶可以選擇以下幾個參數:

  1. CreateMode.PERSISTENT: 創建節點后,不刪除就永久存在
  2. CreateMode.PERSISTENT_SEQUENTIAL:節點path末尾會追加一個10位數的單調遞增的序列
  3. CreateMode.EPHEMERAL:創建后,回話結束節點會自動刪除
  4. CreateMode.EPHEMERAL_SEQUENTIAL:節點path末尾會追加一個10位數的單調遞增的序列

forPath函數指定創建節點的path和保存的數據,path的指定遵循linux文件path格式,創建node時指定的path,父 path節點需要存在,否則創建節點失敗,比如創建"/parent/child"節點,若不存在節點"parent",那么創建節點會失敗。在 znode中保存的數據需要進行序列化,用戶可以選擇使用JSON,XML,java內置的序列化機制,或者Hession以及Google的 protocal Buffer等,為方便講解,節點存儲字符串數據。

獲取節點數據

CuratorFramework提供getData函數,通過指定znode的path,就可以完成數據的獲取。

public String getData(CuratorFramework newClient, String path){ try { return new String(newClient.getData().forPath(path)); } catch (Exception e) { System.out.println("獲取數據失敗, elog=" + e.getMessage()); } return null; }

更新節點

同樣CuratorFramework提供setData函數,通過指定znode的path,可以完成數據的更新。

public void updateNodeDate(CuratorFramework newClient, String path, String data) { try { newClient.setData().forPath(path, data.getBytes()); } catch (Exception e) { System.out.println("更新節點數據失敗, elog=" + e.getMessage()); } }

刪除節點

和獲取,更新節點類似,CuratorFramework提供delete函數,指定znode的path刪除某一個節點。

public void deleteNode(CuratorFramework newClient, String path) { try { newClient.delete().forPath(path); } catch (Exception e) { System.out.println("刪除節點失敗, elog=" + e.getMessage()); } }

Conclusion

本文和大家分享了CuratorFramework的基本使用方法,希望能對大家有所幫助。更多的使用方式可以參考官方給出的API文檔。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM