一,JavaAPI普通操作

二,JavaAPI监控操作

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();
    }
}

 

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄