package com.msb.zookeeper.config; import org.apache.zookeeper.AsyncCallback; import org.apache.zookeeper.WatchedEvent; import org.apache.zookeeper.Watcher; import org.apache.zookeeper.ZooKeeper; import org.apache.zookeeper.data.Stat; import java.util.concurrent.CountDownLatch; /** * @author: 马士兵教育 * @create: 2019-09-20 20:21 */ public class WatchCallBack implements Watcher ,AsyncCallback.StatCallback, AsyncCallback.DataCallback { ZooKeeper zk ; MyConf conf ; CountDownLatch cc = new CountDownLatch(1); public MyConf getConf() { return conf; } public void setConf(MyConf conf) { this.conf = conf; } public ZooKeeper getZk() { return zk; } public void setZk(ZooKeeper zk) { this.zk = zk; } public void aWait(){ zk.exists("/AppConf",this,this ,"ABC"); try { cc.await(); } catch (InterruptedException e) { e.printStackTrace(); } } @Override public void processResult(int rc, String path, Object ctx, byte[] data, Stat stat) { if(data != null ){ String s = new String(data); conf.setConf(s); cc.countDown(); } } @Override public void processResult(int rc, String path, Object ctx, Stat stat) { if(stat != null){ zk.getData("/AppConf",this,this,"sdfs"); } } @Override public void process(WatchedEvent event) { switch (event.getType()) { case None: break; case NodeCreated: zk.getData("/AppConf",this,this,"sdfs"); break; case NodeDeleted: //容忍性 conf.setConf(""); cc = new CountDownLatch(1); break; case NodeDataChanged: zk.getData("/AppConf",this,this,"sdfs"); break; case NodeChildrenChanged: break; } } }