zookeeper的简单例子带你认识zk的API

下面先写个简单的例子,把一个字符串写入到zookeeper当中。

第一步,先引入pom依赖如下:


            org.apache.zookeeper
            zookeeper
            3.4.6

第二步,上代码:

package mypackage;

import org.apache.zookeeper.data.Stat;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.IOException;
import java.util.concurrent.CountDownLatch;


public class LoadDataToZooKeeper {
    private static final Logger logger = LoggerFactory.getLogger(LoadDataToZooKeeper.class);
    public static String hosts = "";
    private static final int SESSION_TIMEOUT = 5000;
    protected CountDownLatch connectedSignal = new CountDownLatch(1);
    protected static ZooKeeper zk;


    // 连接zk
    public void connect() {
        try {
            zk = new ZooKeeper(hosts,SESSION_TIMEOUT, new ConnWatcher());
        } catch (IOException e) {
            logger.info("zk连接失败!");
            e.printStackTrace();
        }
    }

	
    //监听
    public class ConnWatcher implements Watcher{
        public void process(WatchedEvent event) {
            // 连接建立, 回调process接口时, 其event.getState()为KeeperState.SyncConnected
            if (event.getState() == Event.KeeperState.SyncConnected) {
                // 放开闸门, wait在connect方法上的线程将被唤醒
                connectedSignal.countDown();
            }
        }
    }



    public void loadToZK(String content) throws IOException {
        connect(); //获得与zk的连接
        try {
            if(zk.exists("/xx/xx/parentNode", false) == null) { // 父节点不存在时创建
                zk.create("/xx/xx/parentNode","xxxx".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
            }
            Stat stat = zk.exists("/xx/xx/parentNode/sonNode", false);
            if(stat == null){                              //节点不存在时创建
                zk.create("/xx/xx/parentNode/sonNode", content.getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
            } else {
                //节点存在时写入
                zk.setData("/xx/xx/parentNode/sonNode", content.getBytes(),-1);
            }

        } catch (KeeperException e) {
            e.printStackTrace();
        } catch (InterruptedException e) {
            e.printStackTrace();
            logger.info("zk判断结点存在时异常!");
        }

    }


    public static void main(String[] args) throws IOException {
        
        LoadDataToZooKeeper obj = new LoadDataToZooKeeper();
        hosts = args[0];    // 你的zk所在ip,如:127.0.0.1:443
        String content = "test...";  //获得mysql或文件中数据,这些数据是你要写到zookeeper中的
        obj.loadToZK(content);
    }
}

 


其实zookeeper很简单,简单到它只有不到10个api方法:

  • String create(final String path, byte data[], List acl, CreateMode createMode)

作用:

创建znode节点,

参数:

path: 要写到zk哪个路径上

data: 要写哪些数据,把这些数据变成字节码

acl: 访问控制列表

createMode: 节点的类型,临时、顺序或两者。这是一个枚举

  • void delete(final String path, int version)

作用:

删除某个节点

参数:

path: 节点路径

version: znode的当前版本

  • Stat exists(final String path, Watcher watcher)

作用:

判断zk节点是否存在

参数:

path: 节点路径

watcher: 监听,当这个znode节点被改变时,会触发当前watcher

  • Stat setData(final String path, byte data[], int version)

作用:

向节点中写入数据

参数:

path: 节点路径

data: 要写的数据(需要字节化)

version: znode的当前版本。每当数据更改时,zk会更新znode的版本号。

 

  • byte[] getData(final String path, Watcher watcher, Stat stat)

作用:

从指定的znode获取数据

参数:

path: znode路径

watcher: 监视器类型的回调函数。

stat: 返回znode的元数据。

  • List getChildren(final String path, Watcher watcher)

作用:

获取指定znode中的所有子节点

参数:

path: znode路径

watcher: 监视器类型的回调函数。

       


                                       喜欢的话,请微信扫描下方二维码关注我!感谢支持!

                                                        


 

你可能感兴趣的:(zookeeper,zk,zk,zookeeper)