ZK-java api 创建节点实例

zk java 访问第一例:

利用java API访问zookeeper节点,并创建一个/controller的节点,数据为字符串"hellozk".


当主线程创建zk连接后,如果状态符合要求,才进行创建动作; 否则,等待watcher线程状态,等等等。。。等符合要求了再countDown,才创建zk目录。使用CountDownLatch可以实现这个功能。
ZK-java api 创建节点实例_第1张图片
实践吧少年
package chap4;

import org.apache.zookeeper.*;

import java.io.IOException;
import java.util.concurrent.CountDownLatch;

/**
 * countdownlatch
 * Created by niewj on 2016/12/19.
 */
public class ZkPathCreateTest {

    /**
     * 计数:当主线程创建zk连接后,如果状态符合要求,才进行创建动作;
     * 否则,等待watcher线程状态,等等等。。。等符合要求了再countDown,才创建zk目录。
     */
    CountDownLatch cdl = new CountDownLatch(1);

    /**
     * 连接zk,并创建一个目录节点。
     * @throws IOException
     * @throws KeeperException
     * @throws InterruptedException
     */
    private void init() throws IOException, KeeperException, InterruptedException {

        // 1. watcher for zk
        Watcher watcherZk = new Watcher() {
            @Override
            public void process(WatchedEvent watchedEvent) {
                if (Event.KeeperState.SyncConnected == watchedEvent.getState()) {
                    System.out.println("状态::达到同步连接;输出path的状态: path ==> " + watchedEvent.getState());
                    cdl.countDown();
                } else {
                    System.out.println("状态没有达到同步连接的状态,暂时不作为。。。。");
                }
            }
        };

        // 2. init zk args
        ZooKeeper zk = new ZooKeeper("NIE-00:2181,NIE-01:2181,NIE-02:2181", 6000, watcherZk);

        cdl.await();

        // 3. create path /controller ephemeral
        String stat = zk.create("/controller", "hellozk".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
        System.out.println("created path is -->: " + stat);

    }

    public static void main(String[] args) {
        try {
            new ZkPathCreateTest().init();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (KeeperException e) {
            e.printStackTrace();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

小结:

  1. ZooKeeper构造方法传递参数:zk_url, 超时毫秒数,状态监视器
  2. zk.create(path, data, acl列表, 创建的数据类型)
  3. CountDownLatch,倒数计数线程并发工具。如果主线程有需要等待的地方,先设置await(), 在别的线程任务准备妥当可以突破await处往下走的时候在等待线程那里countDown(),countDown的次数,使得等待的剩余0个的时候,主线程就可以继续接下来的动作了。这里的话,就是,zk连接需要等待确认状态,才可以创建节点,所以,确认状态准备好之后,就在watcher里countDown,然后主线程检测到1-1=0,就可以突破await,执行下面的create动作了。

燃烧吧,passion

你可能感兴趣的:(ZK-java api 创建节点实例)