Package com.taobao.top.analysis

Source Code of com.taobao.top.analysis.TestZookeeper

/**
*
*/
package com.taobao.top.analysis;

import java.io.IOException;
import java.util.List;

import org.apache.zookeeper.CreateMode;
import org.apache.zookeeper.KeeperException;
import org.apache.zookeeper.WatchedEvent;
import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.ZooDefs.Ids;
import org.apache.zookeeper.ZooKeeper;
import org.apache.zookeeper.data.Stat;

import com.taobao.top.analysis.util.AnalysisConstants;

/**
* @author fangweng
* @email: fangweng@taobao.com
* 想要实现两件事情,关注某一个节点的数据,修改某一个节点的数据
* 2011-12-31 下午2:53:18
*
*/
public class TestZookeeper implements Watcher{
 
  ZooKeeper zk;

  /**
   * @param args
   * @throws IOException
   * @throws InterruptedException
   * @throws KeeperException
   */
  public static void main(String[] args) throws IOException, KeeperException, InterruptedException {
    // TODO Auto-generated method stub
   
    String servers = "127.0.0.1:2181";
    String groupId = "group1";
    String master1 = "master1";
    String master2 = "master2";
    String slave1 = "slave1";
    String slave2 = "slave2";
    String slave3 = "slave3";
    String config1 = "config1";
   
    TestZookeeper tz = new TestZookeeper();
    ZooKeeper zk = new ZooKeeper(servers,3000,tz);
    tz.zk = zk;
   
    //每次启动时都先检查是否有根目录
    createGroupNodesIfNotExist(zk,groupId);
   
    updateOrCreateNode(zk,getGroupMasterZKPath(groupId)+"/"+master1,"master1value".getBytes("UTF-8"));
    updateOrCreateNode(zk,getGroupMasterZKPath(groupId)+"/"+master2,"master2value".getBytes("UTF-8"));
    updateOrCreateNode(zk,getGroupSlaveZKPath(groupId)+"/"+slave1,"slave1value".getBytes("UTF-8"));
    updateOrCreateNode(zk,getGroupSlaveZKPath(groupId)+"/"+slave2,"slave2value".getBytes("UTF-8"));
    updateOrCreateNode(zk,getGroupSlaveZKPath(groupId)+"/"+slave3,"slave3value".getBytes("UTF-8"));
    updateOrCreateNode(zk,getGroupConfigZKPath(groupId)+"/"+config1,"config1value".getBytes("UTF-8"));
   
    List<String> groups = zk.getChildren(AnalysisConstants.ZK_ROOT, false);
   
    List<String> master = zk.getChildren(getGroupMasterZKPath(groups.get(0)), false);
       
    List<String> slave = zk.getChildren(getGroupSlaveZKPath(groups.get(0)), false);
   
    List<String> config = zk.getChildren(getGroupConfigZKPath(groups.get(0)), false);
   
    System.out.println(new String(zk.getData(getGroupConfigZKPath(groups.get(0)) + "/" + config.get(0), false,null),"utf-8"));
   
    Thread.sleep(200000);

  }
 
  protected static void createGroupNodesIfNotExist(ZooKeeper zk,String groupId) throws KeeperException, InterruptedException
  {
    if (zk.exists(getGroupZKPath(groupId), false) == null)
    {
      createNodeIfNotExist(zk,AnalysisConstants.ZK_ROOT,new byte[0]);
      createNodeIfNotExist(zk,getGroupZKPath(groupId), new byte[0]);
      createNodeIfNotExist(zk,getGroupMasterZKPath(groupId), new byte[0]);
      createNodeIfNotExist(zk,getGroupSlaveZKPath(groupId), new byte[0]);
      createNodeIfNotExist(zk,getGroupConfigZKPath(groupId), new byte[0]);
    }
  }
 
  protected static String getGroupZKPath(String groupId)
  {
    return new StringBuilder().append(AnalysisConstants.ZK_ROOT).append("/")
        .append(groupId).toString();
  }
 
  protected static String getGroupMasterZKPath(String groupId)
  {
    return new StringBuilder().append(getGroupZKPath(groupId)).append(AnalysisConstants.ZK_MASTER).toString();
  }
 
  protected static String getGroupSlaveZKPath(String groupId)
  {
    return new StringBuilder().append(getGroupZKPath(groupId)).append(AnalysisConstants.ZK_SLAVE).toString();
  }
 
  protected static String getGroupConfigZKPath(String groupId)
  {
    return new StringBuilder().append(getGroupZKPath(groupId)).append(AnalysisConstants.ZK_CONFIG).toString();
  }
 
 
  protected static void createNodeIfNotExist(ZooKeeper zk,String path,byte[] data) throws KeeperException, InterruptedException
  {
    Stat node = zk.exists(path, false);
   
    if (node == null)
    {
      zk.create(path,data, Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
    }
  }
 
  protected static void updateOrCreateNode(ZooKeeper zk,String path,byte[] data) throws KeeperException, InterruptedException
  {
    Stat node = zk.exists(path, false);
   
    if (node == null)
    {
      zk.create(path,data,Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
    }
    else
    {
      //不管什么情况都覆盖已有的数据
      zk.setData(path, data, -1);
    }
   
   
    //增加对于节点数据修改的监控
    zk.getData(path, true, null);
  }
 

  @Override
  public void process(WatchedEvent event) {
    switch(event.getType())
    {
      case None:
       
        break;
     
      case NodeCreated:
       
        break;
       
      case NodeDeleted:
       
        break;
       
      case NodeDataChanged:
       
        try
        {
          String path = event.getPath();
          byte[] result = zk.getData(path, true, null);
         
          System.out.println("path: " + path + " ,value : " + new String(result,"UTF-8"));
         
        }
        catch(Exception ex)
        {
          ex.printStackTrace();
        }
       
        break;
       
      case NodeChildrenChanged:
       
        break;
       
      default:
   
    }
  }
 


}
TOP

Related Classes of com.taobao.top.analysis.TestZookeeper

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.