Zookeeper之Curator(1)客戶端對節點的一些監控事件的api使用

Love Lenka發表於2017-04-28

《一》節點改變事件的監聽

 1 public class CauratorClientTest {
 2     
 3     //連結地址
 4     private static  String zkhost="172.19.27.246:2181";
 5     //sessionTimeoutMs會話超時時間,單位為毫秒。預設是60000ms
 6     private static  int  sessionTimeoutMs=5000;
 7     //connectionTimeoutMs連線建立超時時間,單位毫秒,預設15000ms
 8     private static  int connectionTimeOutMs=3000;
 9     //重連策略
10     private static  int maxRetries;
11     //    zookeeper連線間隔時間基數
12     private static int baseSleepTimeMs=1000;
13     //系統域dev,qa,pro
14     private static String domain="dev";
15     
16     
17     /**
18  * 資料節點被改變的事件。能監聽節點儲存的資料發生變化,和節點被刪除的事件。
19  * 節點被刪除後,會呼叫回撥方法。
20  */
21 public static void testNodeChangeEvent() throws Exception{
22     CuratorFramework client = CuratorFrameworkFactory.newClient(zkhost,sessionTimeoutMs,connectionTimeOutMs, new ExponentialBackoffRetry(baseSleepTimeMs,maxRetries));
23     client.start();
24     
25     String path=client.create().creatingParentContainersIfNeeded().withMode(CreateMode.EPHEMERAL).forPath("/dev/sxf/cd","sxf".getBytes());
26     
27     NodeCache nodeCache=new NodeCache(client,path);
28     
29     /**
30      * 註冊資料節點中儲存的資料被改變的事件
31      */
32     nodeCache.getListenable().addListener(new NodeCacheListener() {
33         /**
34          * 資料節點變化事件
35          */
36         @Override
37         public void nodeChanged() throws Exception {
38             
39             ChildData data=nodeCache.getCurrentData();
40             if(data==null){
41                 System.out.println("節點被刪除");
42                 return;
43             }
44             
45             Stat  stat=data.getStat();
46             
47             int a=stat.getNumChildren();
48             
49             System.out.println("子節點的個數為==>"+a);
50             
51             System.out.println("節點資料被改變改變後的數值為==>"+new String(nodeCache.getCurrentData().getData()));
52             
53         }
54     });
55     
56     nodeCache.start();
57     
58     
59     //當前執行緒休眠幾秒
60     Thread.sleep(10000L);
61     
62     
63     client.setData().forPath("/dev/sxf/cd","中國人民解放軍".getBytes());
64     
65     
66     //當前執行緒休眠幾秒
67     Thread.sleep(10000L);
68     client.setData().forPath("/dev/sxf/cd","第二次改變".getBytes());
69     
70     
71     //當前執行緒休眠幾秒
72     Thread.sleep(10000L);
73     client.delete().forPath("/dev/sxf/cd");
74     
75     
76     
77     Thread.sleep(100000L);
78     
79 }
80 
81 }
View Code

 

相關文章