Zookeeper JavaAPI對節點進行增刪改查(詳細步驟)
阿新 • • 發佈:2018-11-17
import java.io.IOException; import java.util.List; import org.apache.zookeeper.CreateMode; import org.apache.zookeeper.KeeperException; import org.apache.zookeeper.WatchedEvent; import org.apache.zookeeper.Watcher; import org.apache.zookeeper.ZooKeeper; import org.apache.zookeeper.ZooDefs.Ids; import org.apache.zookeeper.data.Stat; import org.junit.Before; import org.junit.Test; import org.omg.CORBA.PRIVATE_MEMBER; public class zk01 { private static final String connectString = "192.168.40.10:2181"; private static final int sessionTimeout = 2000; static ZooKeeper zkClient = null; /* *connectString -- host:port[,host:port][basePath] 指定的伺服器列表,多個host:port之間用英文逗號分隔。 *sessionTimeOut -- 會話超時時間。以毫秒為單位。客戶端和伺服器端之間的連線通過心跳包進行維繫,如果心跳包超過這個指定時間則認為會話超時失效。 *watcher -- 監視器。如果為null表示不需要觀察者。 */ @Before public void init() throws IOException{ zkClient = new ZooKeeper(connectString, sessionTimeout,new Watcher() { @Override public void process(WatchedEvent event) { //事件處理邏輯 System.out.println(event.getType()+"---"+event.getPath()); } }); } @Test public void testCreateNode() throws KeeperException, InterruptedException{ //進行增刪改查 /* * 第一個引數:節點的路徑 * 第二個引數:節點存放的資料 * 第三個引數:節點的許可權 * 第四個引數:節點的型別(是暫時的還是持久的) */ String newNodeString = zkClient.create("/eclipse", "111".getBytes(),Ids.OPEN_ACL_UNSAFE,CreateMode.EPHEMERAL); System.out.println("----------\n"); } //判斷該節點是否存在 @Test public void existNode() throws KeeperException, InterruptedException{ /* * 引數1:節點路徑 * 引數2:是否需要監視器,若不需要填寫“false” */ Stat exists = zkClient.exists("/a0000000004", false); System.out.println(exists==null?"not exists":"exists"); System.out.println("----------\n"); } //獲取子節點 @Test public void getChildren() throws KeeperException, InterruptedException{ /* * 引數1:節點路徑 * 引數2:是否需要監視器,若不需要填寫“false” */ List<String> children = zkClient.getChildren("/a0000000004", true); for(String child:children){ System.out.println(child); } System.out.println("----------\n"); } //獲取節點資料 @Test public void nodeData() throws KeeperException, InterruptedException{ /* * 引數1:節點路徑 * 引數2:是否需要監視器,若不需要填寫“false” * 引數3:指定資料節點的狀態資訊:一般填寫“null”或者“new stat” */ byte[] data = zkClient.getData("/a0000000004", false, null); System.out.println(new String(data));//因為存放的是byte()型別資料 System.out.println("----------\n"); } //刪除節點 @Test public void deleteNode() throws InterruptedException, KeeperException{ /* * 引數2:version,可以傳入-1,表明要基於最新版本進行更新操作 */ zkClient.delete("/eclipse", -1); System.out.println("----------\n"); } //修改節點資料 @Test public void setNodeData() throws KeeperException, InterruptedException{ byte[] data = zkClient.getData("/a0000000004", false, null); System.out.println(new String(data)); zkClient.setData("/a0000000004", "222".getBytes(), -1); byte[] data1 = zkClient.getData("/a0000000004", false, null); System.out.println(new String(data1)); } }