0 課程地址
https://coding.imooc.com/lesson/201.html#mid=12721
1 重點關注
1.1 本節內容
java api客戶端刪除節點,包含同步修改和異步修改,只做了異步,同步不通用(因爲沒有回調函數,不知道是否刪除成功)也可以參照視頻看下
1.2 java api 刪除節點同步修改
zkServer.getZookeeper().delete("/test-delete-node", 2);
1.3 java api 刪除節點異步調用(回調函數)
String ctx = "{'delete':'success'}"; zkServer.getZookeeper().delete("/test-delete-node", 0, new DeleteCallBack(), ctx); package com.imooc.zk.demo; import org.apache.zookeeper.AsyncCallback.VoidCallback; public class DeleteCallBack implements VoidCallback { @Override public void processResult(int rc, String path, Object ctx) { System.out.println("刪除節點" + path); System.out.println((String)ctx); } }
2 課程內容
3 Coding
3.1 java api 刪除節點異步調用Demo
- 啓動服務端
進入到
cd /usr/local/zookeeper/bin
重啓zookeeper服務端
./zkServer.sh restart
- 運行java類,刪除節點
package com.imooc.zk.demo; import java.io.IOException; import java.util.List; import org.apache.zookeeper.CreateMode; import org.apache.zookeeper.WatchedEvent; import org.apache.zookeeper.Watcher; import org.apache.zookeeper.ZooDefs.Ids; import org.apache.zookeeper.ZooKeeper; import org.apache.zookeeper.data.ACL; import org.apache.zookeeper.data.Stat; /** * * @Title: ZKConnectDemo.java * @Description: zookeeper 操作demo演示 */ public class ZKNodeOperator implements Watcher { private ZooKeeper zookeeper = null; public static final String zkServerPath = "172.26.139.4:2181"; public static final Integer timeout = 5000; public ZKNodeOperator() {} public ZKNodeOperator(String connectString) { try { zookeeper = new ZooKeeper(connectString, timeout, new ZKNodeOperator()); } catch (IOException e) { e.printStackTrace(); if (zookeeper != null) { try { zookeeper.close(); } catch (InterruptedException e1) { e1.printStackTrace(); } } } } /** * * @Title: ZKOperatorDemo.java * @Description: 創建zk節點 */ public void createZKNode(String path, byte[] data, List<ACL> acls) { String result = ""; try { /** * 同步或者異步創建節點,都不支持子節點的遞歸創建,異步有一個callback函數 * 參數: * path:創建的路徑 * data:存儲的數據的byte[] * acl:控制權限策略 * Ids.OPEN_ACL_UNSAFE --> world:anyone:cdrwa * CREATOR_ALL_ACL --> auth:user:password:cdrwa * createMode:節點類型, 是一個枚舉 * PERSISTENT:持久節點 * PERSISTENT_SEQUENTIAL:持久順序節點 * EPHEMERAL:臨時節點 * EPHEMERAL_SEQUENTIAL:臨時順序節點 */ // result = zookeeper.create(path, data, acls, CreateMode.EPHEMERAL); String ctx = "{'create':'success'}"; zookeeper.create(path, data, acls, CreateMode.PERSISTENT, new CreateCallBack(), ctx); System.out.println("創建節點:\t" + result + "\t成功..."); new Thread().sleep(2000); } catch (Exception e) { e.printStackTrace(); } } public static void main(String[] args) throws Exception { ZKNodeOperator zkServer = new ZKNodeOperator(zkServerPath); // 創建zk節點 //zkServer.createZKNode("/testnode", "testnode".getBytes(), Ids.OPEN_ACL_UNSAFE); /** * 參數: * path:節點路徑 * data:數據 * version:數據狀態 從服務端獲取到的版本號dataversion */ //Stat status = zkServer.getZookeeper().setData("/testnode", "xyz".getBytes(),0); //System.out.println(status.getVersion()); /** * 參數: * path:節點路徑 * version:數據狀態 */ zkServer.createZKNode("/test-delete-node", "123".getBytes(), Ids.OPEN_ACL_UNSAFE); // zkServer.getZookeeper().delete("/test-delete-node", 2); String ctx = "{'delete':'success'}"; zkServer.getZookeeper().delete("/test-delete-node", 0, new DeleteCallBack(), ctx); Thread.sleep(2000); } public ZooKeeper getZookeeper() { return zookeeper; } public void setZookeeper(ZooKeeper zookeeper) { this.zookeeper = zookeeper; } @Override public void process(WatchedEvent event) { } }
- 回調類:
package com.imooc.zk.demo; import org.apache.zookeeper.AsyncCallback.VoidCallback; public class DeleteCallBack implements VoidCallback { @Override public void processResult(int rc, String path, Object ctx) { System.out.println("刪除節點" + path); System.out.println((String)ctx); } }
- 打印日誌:
創建節點: /test-delete-node {'create':'success'} 創建節點: 成功... 刪除節點/test-delete-node {'delete':'success'}
- linux 連接zk客戶端,驗證臨時節點已刪除(斷點形式驗證,新增時查看下節點,刪除後查看下節點)