ZooKeeper 简单实用

Zookeeper

# 服务心跳时间
tickTime=2000
# 投票选举新Leader的初始化时间
initLimit=10
# leader 与 follower心跳检测最大容忍时间,响应超过syncLimit*tickTime,leader认为follwer死掉,从服务器中删除follwer
syncLimit=5
# 数据目录
dataDir=F:\\tmp\\zookeeper\\data

# 日志目录
dataLgDir=F:\\tmp\\zookeeper\\log
# 端口
clientPort=2181

 

1.创建节点:ZooKeeper节点的类型

CreateMode.PERSISTENT 持久节点,该节点客户端断开连接后不会删除
CreateMode.EPHEMERAL 临时节点,该节点客户端断开后删除
CreateMode.EPHEMERAL_SEQUENTIAL 临时节点,改节点客户端断开后删除。并将在其名下附加一个单调递增数
CreateMode.PERSISTENT_SEQUENTIAL 持久节点,该节点客户端断开后不会删除。并将在其名下附加一个单调递增数

创建节点事例:

        try {
            // 实例化一个Zookeeper对象,指定三个参数,
            //url:Zookeeper服务器的地址
            //sessionTimeout:会话时常 一般在minSessionTimeout-maxSessionTimeout之间
            //watcher: 默认的watcher
            ZooKeeper z = new ZooKeeper("127.0.0.1:2181",4000,null);
            try {
         
//创建root节点,包含数据root data,其访问权限为开放,所有人均可以访问,创建模式持久化节点 z.create("/root", "root data".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT_SEQUENTIAL); } catch (KeeperException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }

2.删除节点

z.delete("/root", -1);

删除某一节点的时候,使用delete方法即可删除。删除时需要制定版本号如果为-1时则匹配所有的版本.如果匹配不到相应的节点则会抛出异常。

 3.设值和获取节点内容

 

                //设置该节点的数据,版本号为-1,如果匹配不到节点则会抛出异常
                z.setData("/roog", "hello".getBytes(), -1);
                //获取器节点数据,并放回stat
                Stat stat = new Stat();
                // 节点:获取节点上保存的数据
                // 是否使用默认的watcher,false 为不使用
                // stat,表示节点的状态,是一个传出参数,将返回该节点当前的状态信息
                byte[] data = z.getData("/root",false, stat);

 

通过setData方法,将数据保存到节点上,也可以通过getData方法获取该节点数据,一个znode最多能保存1M的数据

 4.添加子节点

z.create("/root/child", "child root".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);

父节点必须存在,否则抛出异常

5.判断节点是否存在

                stat = z.exists("/root/child", false);
                if(stat == null){
                    System.out.println("节点不存在");
                }else{
                    System.out.println("有");
                }

 

posted @ 2016-11-10 15:21  小严  阅读(258)  评论(0)    收藏  举报