reactive 模式監(jiān)聽節(jié)點(diǎn),修改后立即感知,注意zk的watch 和不同操作callBack函數(shù)之間的區(qū)別
/**
* @author haowq 2021/4/7 9:46
*/
public class WatcherCallBack implements Watcher, AsyncCallback.StatCallback, AsyncCallback.DataCallback {
private ZooKeeper zk;
private CountDownLatch latch = new CountDownLatch(1);
private MyConfig myConfig;
//Getter Setter
public void await() {
//判斷節(jié)點(diǎn)是否存在,然后回調(diào)public void processResult(int rc, String path, Object ctx, Stat stat)
zk.exists("/appConf", this, this, "AsyncCallback.StatCallback");
try {
latch.await();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
//Wathcer process
public void process(WatchedEvent event) {
switch (event.getType()) {
case None:
break;
case NodeCreated:
zk.getData("/appConf", this, this, "AsyncCallback.DataCallback");
break;
case NodeDeleted:
//容忍性
myConfig.setContent("");
latch = new CountDownLatch(1);
break;
case NodeDataChanged:
zk.getData("/appConf", this, this, "AsyncCallback.DataCallback");
break;
case NodeChildrenChanged:
break;
}
}
//AsyncCallback.StatCallback
public void processResult(int rc, String path, Object ctx, Stat stat) {
System.out.println(rc);
System.out.println(path);
System.out.println(ctx.toString());
if (stat != null) {
zk.getData("/appConf", this, this, "AsyncCallback.DataCallback");
}
}
//AAsyncCallback.DataCallback
public void processResult(int rc, String path, Object ctx, byte[] data, Stat stat) {
if (data != null) {
myConfig.setContent(new String(data));
//放行
latch.countDown();
}
}
}