up:: 用代码对zk节点进行操作
监听增删查改事件
package com.imooc.zkjavaapi;
import com.imooc.zkjavaapi.watcher.ConnectWatcher;
import com.imooc.zkjavaapi.watcher.DataChangedWatcher;
import java.io.IOException;
import org.apache.zookeeper.CreateMode;
import org.apache.zookeeper.KeeperException;
import org.apache.zookeeper.ZooDefs.Ids;
import org.apache.zookeeper.ZooKeeper;
import org.apache.zookeeper.ZooKeeper.States;
/**
* 描述: ZK节点改变、删除事件的监听
*/
public class ZkWatcher {
public static void main(String[] args) throws IOException, InterruptedException, KeeperException {
DataChangedWatcher dataChangedWatcher = new DataChangedWatcher();
ZooKeeper zk = new ZooKeeper(ZkConstant.ZK_HOST, ZkConstant.CONNECT_TIMEOUT, dataChangedWatcher);
System.out.println("客户端开始连接ZK服务器");
States state = zk.getState();
System.out.println(state);
Thread.sleep(2000);
state = zk.getState();
System.out.println(state);
Thread.sleep(2000);
zk.create(ZkConstant.PATH1, "imooc1".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL);
Thread.sleep(2000);
byte[] data = null;
//watcher设置为true,代表可以监听对应的事件
data = zk.getData(ZkConstant.PATH1, true, null);
System.out.println(new String(data));
Thread.sleep(2000);
zk.setData(ZkConstant.PATH1, "imooc2".getBytes(), -1);
Thread.sleep(2000);
data = zk.getData(ZkConstant.PATH1, true, null);
System.out.println(new String(data));
zk.delete(ZkConstant.PATH1, -1);
zk.close();
}
}
说明:
设置监听
package com.imooc.zkjavaapi.watcher;
import org.apache.zookeeper.WatchedEvent;
import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.Watcher.Event.EventType;
import org.apache.zookeeper.Watcher.Event.KeeperState;
public class DataChangedWatcher implements Watcher {
@Override
public void process(WatchedEvent event) {
System.out.println("DataChangedWatcher的process被调用了");
if (event.getType()== EventType.NodeDataChanged) {
System.out.println("数据被改变");
}
if (event.getType()== EventType.NodeDeleted) {
System.out.println("节点已删除");
}
}
}
说明: 前面提到过watcher触发条件