zookeeper基本API实践 | AiTi修炼|重剑无锋,拈花微笑
Header
Header

zookeeper基本API实践

zookeeper基本API实践

zookeeper 基本API

1. 连接zookeeper集群

/** zookeeper集群连接地址 */ static final String CONNECT_ADDR = "zk1:2181,zk2:2181,zk3:2181"; /** session超时时间 */ static final int SESSION_OUTTIME = 2000;//ms  /** 信号量,阻塞程序执行,用于等待zookeeper连接成功,发送成功信号 */ static final CountDownLatch connectedSemaphore = new CountDownLatch(1); public static void main(String[] args) throws Exception{
        ZooKeeper zk = new ZooKeeper(CONNECT_ADDR, SESSION_OUTTIME, new Watcher(){ @Override public void process(WatchedEvent event) { //获取事件的状态 KeeperState keeperState = event.getState();
                EventType eventType = event.getType(); //如果是建立连接 if(KeeperState.SyncConnected == keeperState){ if(EventType.None == eventType){ //如果建立连接成功,则发送信号量,让后续阻塞程序向下执行 connectedSemaphore.countDown();
                        System.out.println("zk 建立连接");
                    }
                }
            }
        }); //进行阻塞 connectedSemaphore.await();

2.创建节点

/**
   *
   * @param zk
   * @throws KeeperException
   * @throws InterruptedException
   */ private static void createNode(ZooKeeper zk) throws KeeperException, InterruptedException { //zk的原始api中有两种创建节点方式:同步以及异步方式 //创建节点,该节点为持久化节点(CreateMode.PERSISTENT),只要创建成功即使客户端会话断开,该节点也会被持久化在zk集群 zk.create(ZK_NODE1_PATH, ZK_NODE1_DATA.getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT); //创建子节点,在zk的原始api中不支持递归创建节点,即父节点不存在,则无法创建子节点,假设/zk_node2节点不存在,则不可以创建zk_node2/child_node2 zk.create(ZK_NODE1_CHILD_PATH, ZK_NODE1_CHILD_DATA.getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT); // }

3.获取节点信息

/**
   *
   * @param zk
   * @throws KeeperException
   * @throws InterruptedException
   */ private static void getNodeInfo(ZooKeeper zk) throws KeeperException, InterruptedException { //zk的原始api中有两种获取节点方式:同步以及异步方式 //获取节点数据,返回字节数组 byte[] data = zk.getData(ZK_NODE1_PATH, false, null); //将字节数组转换为String System.out.println(new String(data));
  }

4.更新节点信息

/**
   *
   * @param zk
   * @throws KeeperException
   * @throws InterruptedException
   */ private static void uptNodeInfo(ZooKeeper zk) throws KeeperException, InterruptedException { //zk的原始api中有两种更新节点方式:同步以及异步方式 //更新节点数据 zk.setData(ZK_NODE1_PATH, ZK_NODE1_UPT_DATA.getBytes(), -1); //获取更新后的节点信息 getNodeInfo(zk);
  }

5.判断节点是否存在

/**
  *
  * @param zk
  * @return * @throws KeeperException
  * @throws InterruptedException
  */ private static boolean isExitsNode(ZooKeeper zk) throws KeeperException, InterruptedException {
     Stat stat =zk.exists(ZK_NODE1_PATH,false);
     System.out.print(stat); return null==stat;
 }

6.删除节点

/**
   *
   * @param zk
   * @throws KeeperException
   * @throws InterruptedException
   */ private static void deleteNode(ZooKeeper zk) throws KeeperException, InterruptedException { //zk的原始api中有两种删除节点方式:同步以及异步方式 if(isExitsNode(zk)){
          zk.delete(ZK_NODE1_PATH,-1);
      }
  }

rscala.com版权所有,本文zookeeper基本API实践转载请注明出处:http://rscala.com/index.php/338.html

该文章归档分类于 zookeeper实践

Leave a Reply

电子邮件地址不会被公开。 必填项已用*标注

*

code