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 }