网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
ZooKeeper client;
@Before
public void init() throws IOException {
// 注意逗号后不要加空格,严格按照格式,在下面写自己对应得zookeeper服务集群得ip
String connectString="192.168.106.43:2182,192.168.106.44:2182,192.168.106.45:2182";
// String connectString=“192.168.106.43,192.168.106.44,192.168.106.45”;
int sessionTimeout = 20000;
client = new ZooKeeper(connectString, sessionTimeout, new Watcher() {
@Override
public void process(WatchedEvent watchedEvent) {
}
});
}
@Test
public void grtChild() throws InterruptedException, KeeperException {
// 参数true表示开启子节点的监听
List<String> children = client.getChildren("/", true);
for (String child: children) {
System.out.println(child);
}
}
}
上面并不能实时监听节点的变化,即使我们在使用`getChildren`是开启了子节点的监听。这是因为两个原因:第一,程序执行完一次监听后就退出了。第二,监听器注册一次只能够监听一次(参考:[Zookeeper入门到精通05——Zookeeper客户端命令行操作](https://bbs.csdn.net/topics/618545628),小节:监听器原理)。如何才能够实时监听子节点,并且一有变化就输出呢?很简单,把上面的代码稍微修改下即可。
public class ZKClient {
ZooKeeper client;
@Before
public void init() throws IOException {
// 注意逗号后不要加空格,严格按照格式,在下面写自己对应得zookeeper服务集群得ip
String connectString="192.168.106.43:2182,192.168.106.44:2182,192.168.106.45:2182";
// String connectString=“192.168.106.43,192.168.106.44,192.168.106.45”;
int sessionTimeout = 20000;
client = new ZooKeeper(connectString, sessionTimeout, new Watcher() {
@Override
public void process(WatchedEvent watchedEvent) {
List children = null;
try {
// 参数true表示开启子节点的监听
children = client.getChildren(“/”, true);
} catch (KeeperException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
for (String child: children) {
System.out.println(child);
}
}
});
}
}
@Test
public void grtChild() throws InterruptedException, KeeperException {
List children = client.getChildren(“/”, true);
for (String child: children) {
System.out.println(child);
}
// 延时阻塞,防止程序退出
Thread.sleep(Long.MAX_VALUE);
}
#### 二、判断节点是否存在
public class ZKClient {
ZooKeeper client;
@Before
public void init() throws IOException {
// 注意逗号后不要加空格,严格按照格式,在下面写自己对应得zookeeper服务集群得ip
String connectString="192.168.106.43:2182,192.168.106.44:2182,192.168.106.45:2182";
// String connectString=“192.168.106.43,192.168.106.44,192.168.106.45”;
int sessionTimeout = 20000;
client = new ZooKeeper(connectString, sessionTimeout, new Watcher() {
@Override
public void process(WatchedEvent watchedEvent) {}
});
}
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
45628)**
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!