1. 程式人生 > >Zookeeper Java API (二) zk節點內容的操作和節點的刪除

Zookeeper Java API (二) zk節點內容的操作和節點的刪除

獲取節點內容

獲取節點內容的方法定義

public byte[] getData(String path, boolean watch, Stat stat)

其中:
- path:要獲取內容的節點路徑
- watch:是否設定監控,也就是是否需要回調
- stat:節點狀態
使用示例(異常自行處理)

/**
 * 根據節點路徑獲取節點內容
 *
 * @param path
 * @return 如果返回空,獲取失敗
 */
public String getData(String path) {
    Stat stat = new Stat();
    try {
        byte
[] data = zooKeeper.getData(path, false, stat); String value = new String(data, "UTF-8"); return value; } catch (KeeperException e) { e.printStackTrace(); } catch (InterruptedException e) { e.printStackTrace(); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } return
null; }

如果想要非同步讀取節點,也就是為讀取節點的內容設定監控點,可以使用如下API

public void getData(String path, boolean watch, DataCallback cb, Object ctx)
public void getData(final String path, Watcher watcher,DataCallback cb, Object ctx)

其中:
- DataCallback cb:非同步回撥函式
- Object ctx:自定義的引數資訊,可以在DataCallback中的processResult方法中使用
對於第一個方法,使用如下:

zooKeeper.getData(path, true, new AsyncCallback.DataCallback() {
    public void processResult(int rc, String path, Object ctx, byte[] data, Stat stat) {
        System.out.println(new String(data));
    }
},null);

由於zookeeper的觸發操作屬於單次操作,當一個監視點被一個事件觸發時,就會產生一個通知資訊,並且只會產生一次.如果想要對該節點一直設定監控,那麼應該使用第二個方法

zooKeeper.getData(path, new Watcher() {
    public void process(WatchedEvent event) {
        System.out.println("*****************************");
        System.out.println(event);
    }
}, new AsyncCallback.DataCallback() {
    public void processResult(int rc, String path, Object ctx, byte[] data, Stat stat) {
        System.out.println("*****************************");
        System.out.println(new String(data));
    }
}, null);

對節點內容重新賦值

所謂重新賦值,也就是對節點內容做修改

方法定義

public Stat setData(final String path, byte data[], int version) throws KeeperException, InterruptedException //同步獲取
public void setData(final String path, byte data[], int version,StatCallback cb, Object ctx) //非同步獲取

其中
- version指的時節點版本號,當version=-1時表示忽略版本號比對
- StatCallback cb:非同步回撥函式
- Object ctx:自定義的引數資訊,可以在StatCallback中的processResult方法中使用

Stat stat = zooKeeper.setData(path, "random1".getBytes(), -1);
if (stat != null) {
    //getData
}

獲取子節點

獲取子節點的包含8個API,使用方法和getData()基本相同

public List<String> getChildren(final String path, Watcher watcher) throws KeeperException, InterruptedException //同步
public List<String> getChildren(String path, boolean watch) throws KeeperException, InterruptedException //同步
public void getChildren(final String path, Watcher watcher,ChildrenCallback cb, Object ctx) //非同步
public void getChildren(final String path, Watcher watcher,ChildrenCallback cb, Object ctx) //非同步
public void getChildren(String path, boolean watch, ChildrenCallback cb,Object ctx) //非同步
public void getChildren(String path, boolean watch, ChildrenCallback cb,Object ctx) //非同步
public List<String> getChildren(final String path, Watcher watcher,Stat stat) //同步
public List<String> getChildren(String path, boolean watch, Stat stat) throws KeeperException, InterruptedException //同步
public void getChildren(final String path, Watcher watcher,Children2Callback cb, Object ctx) //非同步
public void getChildren(String path, boolean watch, Children2Callback cb,Object ctx) //非同步

刪除節點

同樣的 包含一個同步刪除和一個非同步刪除

public void delete(final String path, int version) throws InterruptedException, KeeperException //同步
public void delete(final String path, int version, VoidCallback cb,Object ctx) //非同步

使用示例

zk中原節點列表

[zk: 192.168.1.6:2181,192.168.1.6:2182,192.168.1.6:2183(CONNECTED) 16] ls /
[path1, zookeeper]

執行程式碼

Stat stat = new Stat();
zooKeeper.getData(path,false,stat);
zooKeeper.delete(path,stat.getVersion());

zk中節點列表

[zk: 192.168.1.6:2181,192.168.1.6:2182,192.168.1.6:2183(CONNECTED) 17] ls /
[zookeeper]

相關推薦

Zookeeper Java API () zk節點內容操作節點刪除

獲取節點內容 獲取節點內容的方法定義 public byte[] getData(String path, boolean watch, Stat stat) 其中: - path:要獲取內容的節點路徑 - watch:是否設定監控,也就是是否需要

Zookeeper Java API (三) zk節點的通知(Watcher)回撥(CallBack)

Zk中的通知(Watcher) ZooKeeper中實現對接點的監控,需要實現Watcher介面類,實現其中的process方法 public class WatcherDemo implements Watcher{ public void p

ZooKeeper Java API

state exce 處理 art throws 枚舉類 event exception 類型 org.apache.zookeeper.ZookeeperZookeeper 是在 Java 中客戶端主類,負責建立與 zookeeper 集群的會話, 並提供方法進行操作。o

zookeeper java api(2)

    這裡介紹其他的API對zookeeper的操作。 同步方式獲取子節點資料 public static void getChildrenSync() throws KeeperException, InterruptedException {

zookeeper java api(1)

1 Zookeeper安裝以及啟動     這裡我已經進行了安裝,並且啟動了Zookeeper。埠是2182 2 Zookeeper config tickTime=2000 initLimit=10 syncLimit=5 dataDir=D://zook

java Api 讀取HDFS檔案內容

package dao; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.*; import java.io.*; public class HDFSApi { /** * 讀取檔案內

Zookeeper --- Java API簡單例項

1、簡單使用 import java.util.List; import org.apache.zookeeper.CreateMode; import org.apache.zookeeper.WatchedEvent; import org.apache.zookeep

ElasticSearch Java Api() -檢索索引庫

上篇部落格記錄瞭如何用java呼叫api把資料寫入索引,這次記錄下如何搜尋。 一、準備資料 String data1 = JsonUtil.model2Json(new Blog(1, "git簡介", "2016-06-19", "SVN與Git最主要的區別..

使用 FileSystem JAVA API 對 HDFS 進行讀、寫、刪除操作

Below is a code sample of how to read from and write to HDFS in java.  1. Creating a configuration object:  To be able to read from or write to HDFS,

使用ZooKeeper Java API程式設計

https://www.cnblogs.com/IcanFixIt/p/7882107.htmlhttps://blog.csdn.net/qiushisoftware/article/details/79043379https://blog.csdn.net/wo54107

Zookeeper Java API呼叫

public class ZooKeeperTest implements Watcher{ //public final static String zkServerPath = "12.45.67.80:2181"; //叢集,使用逗號分隔 public final

Java實現叉樹的建立遍歷操作(有更新)

博主強烈建議跳過分割線前面的部分,直接看下文更新的那些即可。 最近在學習二叉樹的相關知識,一開始真的是毫無頭緒。本來學的是C++二叉樹,但苦於編譯器老是出故障,於是就轉用Java來實現二叉樹的操作。但是二者原理是一致的,而且實現的方式也是大同小異! 下面

hbase學習教程(三):HBase優化技巧、HBase基本命令、使用Java API對HBase伺服器進行操作

HBase優化技巧 1 修改 linux 系統引數 Linux系統最大可開啟檔案數一般預設的引數值是1024,如果你不進行修改併發量上來的時候會出現“Too Many Open Files”的錯誤,導致整個HBase不可執行,你可以用ulimit -n 命令

Java API訪問ZK的許可權控制

無許可權訪問結點 /** * 對於ZK的授權訪問 * Created by liuhuichao on 2017/7/27. */ public class AutoSample {

【Kafka】使用非自帶zookeeper Java API 例子

這裡沒有使用kafka自帶的zk。1.啟動zk:zk下載解壓至任意資料夾。新建kafka-zk-csdn資料夾。這裡啟動包含三個節點的zk偽叢集,進入kafka-zk-csdn資料夾,新建zk1,zk2和zk3資料夾。kafka-zk-csdn:--zk1    --data

DOM內容操作自定義、樣式改變

abcdefg result 定義 tel class abcde inner 參數 fun 自定義 function 方法名或函數名(參數1,參數2,、、、) { 方法體; return返回值;(可不寫) } function a

JAVA基礎--JAVA API常見對象(包裝類正則)12

hexstring 需要 java基礎 test 指定 ffffff 9.png .com ring 一、基本類型包裝類   1.基本類型包裝類介紹       8種基本類型:    byte short int long float

java IO():字節流(InputStreamOutputStream)

資源 roo details nsis utils andro 程序 hit sts 數據流分為輸入、輸出流,無論是輸入流還是輸出流,都可看作是在源和目標之間架設一根"管道",這些管道都是單向流動的,要麽流入到內存(輸入流),要麽從內存流出(輸出流)。 應用於java

Python學習(十)文件操作異常處理以及使用json存儲數據

ice 情況 dataset visio 獲取 大致 一個 百萬 能夠 Python 文件操作和異常處理 Python 文件操作 文件操作步驟 打開文件,打開方式(讀寫) open(file_name) 操作文件(增刪改查) 關閉文件, file_name.cl

zookeeper實踐() 偽分散式部署配置

最近在自己的虛擬機器上測試kafka,涉及到zookeeper,因此對zookeeper進行一些學習。 kafka有自帶的zookeeper,但是自帶的zookeeper配置檔案非常簡單。 本文以獨立的zookeeper作為配置的軟體。 1、目標:  在自己工作機上的虛擬機