Zookeeper 学习(四) zookeeper的javaAPI使用
SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。
扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄
正文
一,JavaAPI普通操作
上篇文章已经对zookeeper的使用有了简单的介绍,api的使用也相对简单,在使用前需要导入zookeeper的jar包,其他就如下代码。
package zookeeperTest; import org.apache.zookeeper.WatchedEvent; import org.apache.zookeeper.Watcher; import org.apache.zookeeper.Watcher.Event.EventType; import org.apache.zookeeper.Watcher.Event.KeeperState; import org.apache.zookeeper.ZooKeeper; import org.junit.Before; import org.junit.Test; public class ZookeeperWatch { static ZooKeeper zk = null; WatchDemo wd = new WatchDemo(); // 创建watcher类实现Watch接口 public static class WatchDemo implements Watcher{ @Override public void process(WatchedEvent event) { // event返回的事件对象 if(event.getState() == KeeperState.SyncConnected && event.getType() == EventType.NodeDataChanged) { System.out.println("有数据改动了"); try { zk.getData("/server", true, null); // 循环监听 } catch (Exception e) { } }else if (event.getState() == KeeperState.SyncConnected && event.getType() == EventType.NodeChildrenChanged) { System.out.println("子节点变化了"); } } } @Before public void init() throws Exception{ // 构造一个连接zookeeper的客户端对象 zk = new ZooKeeper("hd1:2181,hd2:2181,hd3:2181", 2000, wd); } // 节点数据监听 @Test public void getUpdateWatch() throws Exception{ zk.getData("/server", true, null); Thread.sleep(Long.MAX_VALUE); } // 节点节点监听 @Test public void getChildWatch() throws Exception{ zk.getChildren("/server", true); Thread.sleep(Long.MAX_VALUE); } }
二,JavaAPI监控操作
上面一节是无监控的使用,下面是有监控的使用:
package zookeeperTest; import java.util.List; import org.apache.zookeeper.CreateMode; import org.apache.zookeeper.ZooDefs.Ids; import org.apache.zookeeper.ZooKeeper; import org.apache.zookeeper.data.Stat; import org.junit.Before; import org.junit.Test; public class ZookeeperDemo { ZooKeeper zk=null; @Before public void init() throws Exception { // 构造一个连接zookeeper的客户端对象 zk = new ZooKeeper("hd1:2181,hd2:2181,hd3:2181", 200, null); } @Test public void testCreate() throws Exception { // 参数1:要创建的节点路径 参数2:数据 参数3:访问权限 参数4:节点类型 String path = zk.create("/java", "hello word".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT); System.out.println(path); zk.close(); } @Test public void testUpdate() throws Exception { // 参数1:节点路径 参数2:数据 参数3:所要修改的版本,-1代表任何版本 Stat status = zk.setData("/java", "set data test".getBytes(), -1); zk.close(); } @Test public void testGet() throws Exception { // 参数1:节点路径 参数2:是否要监听 参数3:所要获取的数据的版本,null表示最新版本 byte[] data = zk.getData("/java", false, null); System.out.println(new String(data, "UTF-8")); zk.close(); } @Test public void testGetChild() throws Exception { // 参数1:节点路径 参数2:是否要监听 // 注意:返回的结果中只有子节点名字,不带全路径 List<String> childs = zk.getChildren("/", false); for (String string : childs) { System.out.println(string); } zk.close(); } @Test public void testRemove() throws Exception { zk.delete("/java", -1); List<String> childs = zk.getChildren("/", false); for (String string : childs) { System.out.println(string); } zk.close(); } }

更多精彩