创建一个节点,并监听它,但是只能提示客户端一次
import org.apache.zookeeper.CreateMode;
import org.apache.zookeeper.WatchedEvent;
import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.ZooKeeper;
import org.apache.zookeeper.ZooDefs.Ids;
import org.junit.Before;
import org.junit.Test;
public class ZookeeperSwatchDemo {
ZooKeeper zk = null;
@Before
//创建一个zookeeper客户端对象
public void test() throws Exception {
zk = new ZooKeeper("node01:2181,node02:2181,node03:2181", 2000, null);
}
@Test
//在zookeeper中创建一个mygils节点
public void testCreate() throws Exception {
zk.create("/mygirls", "angleboby".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
//路径; 任意数据,最大1M; 访问权限,一般用不着; 节点创建模式,四种组合,persistent
}
@Test
public void testSwatch() throws Exception {
//获取数据,第二个参数为是否监听,直接使用默认方法处理事件
byte[] data = zk.getData("/mygirls", new Watcher() {
@Override
public void process(WatchedEvent event) {
System.out.println(event.getPath()); //收到事件发生的节点路径
System.out.println(event.getType()); //收到事件发生的类型
System.out.println("隐蔽,隐蔽!!!兄弟们,快快快啊!!!!");
}
}, null);
//将二进制数据使用utf8的编码输出
System.out.println(new String(data, "utf-8"));
//进入睡眠,时间为最长,但是有另一个zookeeper线程在默默监控
Thread.sleep(Long.MAX_VALUE);
}
}