public class ZKDemo1 { private static final String CONNECT_STRING = "hadoop1:2181,hadoop2:2181,hadoop3:2181"; //如果zookeeper使用的是默認(rèn)端口的話,此處可以省略端口號(hào) //private static final String CONNECT_STRING = "hadoop1,hadoop2,hadoop3"; //設(shè)置超時(shí)時(shí)間 private static final int SESSION_TIMEOUT = 5000; public static void main(String[] args) throws Exception { //獲取zookeeper的連接 //沒(méi)有配置監(jiān)聽(tīng)的話,最后一個(gè)參數(shù)設(shè)為null ZooKeeper zk = new ZooKeeper(CONNECT_STRING, SESSION_TIMEOUT, null); //創(chuàng)建一個(gè)節(jié)點(diǎn) /** * 四個(gè)參數(shù)path, data, acl, createMode * path:創(chuàng)建節(jié)點(diǎn)的絕對(duì)路徑 * data:節(jié)點(diǎn)存儲(chǔ)的數(shù)據(jù) * acl:權(quán)限控制 * createMode:節(jié)點(diǎn)的類(lèi)型----永久、臨時(shí) 有編號(hào)的、沒(méi)有編號(hào)的 * * */ //String create = zk.create("/xx", "xx".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT_SEQUENTIAL); //System.out.println(create);//輸出的結(jié)果是:/xx0000000008 /** * 判斷節(jié)點(diǎn)是否存在 * */ Stat exists = zk.exists("/xx0000000008", null); if(exists == null) { System.out.println("節(jié)點(diǎn)不存在"); }else { System.out.println("節(jié)點(diǎn)存在"); } /** * 查看節(jié)點(diǎn)的數(shù)據(jù) * * */ /*byte[] data = zk.getData("/xx0000000008", false, null); System.out.println(new String(data));*/ /** * 修改節(jié)點(diǎn)的數(shù)據(jù) * */ /*Stat setData = zk.setData("/xx0000000008", "xyz".getBytes(), -1); if(setData == null) { System.out.println("節(jié)點(diǎn)不存在 --- 修改不成功"); }else { System.out.println("節(jié)點(diǎn)存在 --- 修改成功"); }*/ /** * 刪除節(jié)點(diǎn) * */ /*zk.delete("/xx0000000008", -1);*/ //關(guān)閉zookeeper的連接 zk.close(); } } 監(jiān)聽(tīng)設(shè)置 1 public class ZKDemo2 { 2 3 private static final String CONNECT_STRING = "hadoop1,hadoop2,hadoop3"; 4 private static final int SESSION_TIMEOUT = 5000; 5 6 public static void main(String[] args) throws Exception { 7 8 // 獲取連接 9 // 當(dāng)前的這個(gè)匿名內(nèi)部類(lèi)不是已經(jīng)添加好的監(jiān)聽(tīng), 以后只要是當(dāng)前這個(gè)zk對(duì)象添加了任何的監(jiān)聽(tīng)器響應(yīng)了之后,都會(huì)調(diào)用這個(gè)process方法 10 ZooKeeper zk = new ZooKeeper(CONNECT_STRING, SESSION_TIMEOUT, new Watcher() { 11 12 @Override 13 public void process(WatchedEvent event) { 14 15 System.out.println("1111111111111111111111"); 16 KeeperState state = event.getState(); 17 String path = event.getPath(); 18 EventType type = event.getType(); 19 20 System.out.println(state+"\t"+path+"\t"+type); 21 } 22 }); 23 24 System.out.println("2222222222222222222222"); 25 26 /** 27 * 注冊(cè)監(jiān)聽(tīng) 28 * 第二個(gè)參數(shù)有三種傳法: 29 * 30 * 1、false, 表示不使用監(jiān)聽(tīng)器 31 * 32 * 2、watcher對(duì)象, 表示當(dāng)前的這次監(jiān)聽(tīng)如果響應(yīng)不了的話,就會(huì)回調(diào)當(dāng)前這個(gè)watcher的process方法 33 * 34 * 3、true, 表示如果當(dāng)前的會(huì)話/zk 所注冊(cè)或者添加的所有的監(jiān)聽(tīng)器的響應(yīng),都會(huì)會(huì)調(diào)用 獲取連接時(shí) 初始化的 監(jiān)聽(tīng)器對(duì)象中 的 process 方法 35 */ 36 zk.getData("/a/c", true, null); 37 38 System.out.println("3333333333333333333333333333"); 39 Thread.sleep(5000); 40 41 zk.setData("/a/c", "hehe666".getBytes(), -1); 42 43 System.out.println("4444444444444444444444444444"); 44 45 zk.close(); 46 47 48 49 } 50 51 } 輸出結(jié)果 |
|
來(lái)自: HK123COM > 《Zookeeper》