|
@ -1,5 +1,81 @@
|
1
|
1
|
package com.ai.ipu.example.zookeeper;
|
2
|
2
|
|
|
3
|
import org.apache.zookeeper.*;
|
|
4
|
|
|
5
|
import java.io.IOException;
|
|
6
|
import java.util.List;
|
|
7
|
|
3
|
8
|
public class ZookeeperExample {
|
|
9
|
// 会话超时时间,设置为与系统默认时间一致
|
|
10
|
private static final int SESSION_TIMEOUT = 2 * 1000;
|
|
11
|
|
|
12
|
// 创建 ZooKeeper 实例
|
|
13
|
private ZooKeeper zk;
|
|
14
|
|
|
15
|
// 创建 Watcher 实例
|
|
16
|
private Watcher wh = new Watcher() {
|
|
17
|
public void process(WatchedEvent event) {
|
|
18
|
System.out.println("触发了WatchedEvent的事件 >>> " + event.toString());
|
|
19
|
}
|
|
20
|
};
|
|
21
|
|
|
22
|
// 初始化 ZooKeeper 实例
|
|
23
|
private void createZKInstance() throws IOException {
|
|
24
|
// 连接到ZK服务,多个可以用逗号分割写
|
|
25
|
zk = new ZooKeeper("47.105.160.21:2181,47.105.160.21:2182,47.105.160.21:2183", ZookeeperExample.SESSION_TIMEOUT, this.wh);
|
|
26
|
|
|
27
|
}
|
|
28
|
|
|
29
|
private void showNodes(String path) throws InterruptedException, KeeperException {
|
|
30
|
List<String> list = zk.getChildren(path, this.wh);
|
|
31
|
int i = 1;
|
|
32
|
for (String node : list) {
|
|
33
|
System.out.println("(" + i + ")" + node);
|
|
34
|
i++;
|
|
35
|
}
|
|
36
|
}
|
|
37
|
|
|
38
|
private void ZKOperations() throws InterruptedException, KeeperException {
|
|
39
|
System.out.println("初始节点:");
|
|
40
|
showNodes("/");
|
|
41
|
System.out.println("---------------------------------");
|
|
42
|
|
|
43
|
System.out.println("创建 ZooKeeper 节点 (znode : myzktest, 数据: myData2 ,权限: OPEN_ACL_UNSAFE ,节点类型: Persistent");
|
|
44
|
zk.create("/myzktest", "myData2".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
|
|
45
|
System.out.println("查看是否创建成功: ");
|
|
46
|
System.out.println("当前节点:");
|
|
47
|
showNodes("/");
|
|
48
|
System.out.println("/myzktest的数据为:");
|
|
49
|
System.out.println(new String(zk.getData("/myzktest", this.wh, null)));// 添加Watch
|
|
50
|
System.out.println("---------------------------------");
|
|
51
|
|
|
52
|
System.out.println("修改节点数据 ");
|
|
53
|
zk.setData("/myzktest", "liutong".getBytes(), -1);
|
|
54
|
System.out.println("/myzktest的数据为:");
|
|
55
|
System.out.println(new String(zk.getData("/myzktest", false, null)));
|
|
56
|
System.out.println("---------------------------------");
|
|
57
|
|
|
58
|
// 这里再次进行修改,则不会触发Watch事件,这就是我们验证ZK的一个特性“一次性触发”,也就是说设置一次监视,只会对下次操作起一次作用。
|
|
59
|
System.out.println("3再次修改节点数据 ");
|
|
60
|
zk.setData("/myzktest", "liutong2".getBytes(), -1);
|
|
61
|
System.out.println("/myzktest的数据为:");
|
|
62
|
System.out.println(new String(zk.getData("/myzktest", false, null)));
|
|
63
|
System.out.println("---------------------------------");
|
|
64
|
|
|
65
|
System.out.println("删除节点 ");
|
|
66
|
zk.delete("/myzktest", -1);
|
|
67
|
System.out.println(" 节点状态: [" + zk.exists("/myzktest", false) + "]");
|
|
68
|
showNodes("/");
|
|
69
|
}
|
|
70
|
|
|
71
|
private void ZKClose() throws InterruptedException {
|
|
72
|
zk.close();
|
|
73
|
}
|
4
|
74
|
|
|
75
|
public static void main(String[] args) throws IOException, InterruptedException, KeeperException {
|
|
76
|
ZookeeperExample dm = new ZookeeperExample();
|
|
77
|
dm.createZKInstance();
|
|
78
|
dm.ZKOperations();
|
|
79
|
dm.ZKClose();
|
|
80
|
}
|
5
|
81
|
}
|