Zookeeper--客户端操作

客户端连接示例

    Zookeeper类,是我们编程时最常用的类文件。这个类是Zookeeper客户端的主要类文件。如果要使用Zookeeper服务,应用程序首先必须创建一个Zookeeper实例,这时就需要使用此类。一旦客户端和Zookeeper服务建立起了连接,Zookeeper系统将会给次连接会话分配一个ID值,并且客户端将会周期性的向服务器端发送心跳来维持会话连接。只要连接有效,客户端就可以使用Zookeeper API来做相应处理了。
     而客户端能进行的操作也就是服务中能进行的9中操作(参见Zookeeper–简介 之Zookeeper节点的属性
    下面是一个简单的客户端连接,节点的创建等操作的示例:

public class ZooKeeperTest {
     public static final int SESSION_TIMEOUT = 30000;

     private ZooKeeper zk;
     private Watcher wh = new Watcher(){
          public void process(WatchedEvent event){
              System.out.println(event.toString());
              //如果连接诶成功,则输出其状态
              if(event.getState() == KeeperState.SyncConnected){
                   System.out.println("客户端与zookeeper的连接会话创建成功"+event.getState());
              }
          }
     };
     //创建zookeeper客户端对象
     public void createZKInstance() throws IOException{
          zk = new ZooKeeper("192.168.57.130:2181,192.168.57.131:2181,192.168.57.132:2181",SESSION_TIMEOUT,wh);
          System.out.println("状态:"+zk.getState());
     }

     //使用客户端来对zookeeper操作
     public void zkOperations() throws KeeperException, InterruptedException{
          //创建一个节点
          System.out.println("创建javanode节点");
          zk.create("/javanode2", "sss".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
          String data = new String(zk.getData("/javanode2", false, null));
          System.out.println(data);
     }
     public void list(String groupName) throws KeeperException, InterruptedException{
          try{
              List<String> children = zk.getChildren(groupName, false);
              if(children.isEmpty()){
                   System.out.println("No members in group "+groupName);
                   System.exit(1);
              }
              System.out.println("--------------");
              for(String child:children){
                   System.out.println(child);
              }
              System.out.println("--------------");
          }catch(KeeperException.NoNodeException e){
              System.out.println("Group :"+groupName +" does not exist");
              System.exit(1);
          }
     }

     public void zkClose() throws InterruptedException{
          zk.close();
          System.out.println("客户端关闭");
     }

     public static void main(String[] args) throws IOException, KeeperException, InterruptedException{
          ZooKeeperTest zkt  = new ZooKeeperTest();
          zkt.createZKInstance();
          zkt.zkOperations();
          zkt.list("/");
          zkt.zkClose();
     }
}

运行结果为:
状态:CONNECTING
创建javanode节点
WatchedEvent state:SyncConnected type:None path:null
客户端与zookeeper的连接会话创建成功SyncConnected
--
sss
--------------
javanode2
zookeeper
pomelo
hbase
--------------
客户端关闭

Watch触发器示例

    对Watch触发器进行补充(关于watch详细,参见文章 Zookeeper–简介 之Watch触发器
    下面是一个watch的简单示例:


public class SetDataSync implements Watcher{

     private static CountDownLatch connectedSemaphore = new CountDownLatch(1);
     private static ZooKeeper zk = null;
     private static Stat stat = new Stat();

     public void process(WatchedEvent event) {
          if(event.getState() == KeeperState.SyncConnected ){
              if(event.getType() == EventType.None && event.getPath() == null){
                   connectedSemaphore.countDown();
              }else if(event.getType() == EventType.NodeDataChanged){
                   try {
                        System.out.println(new String(zk.getData(event.getPath(), true, stat)));
                        System.out.println(stat.getCzxid()+","+stat.getMzxid()+","+stat.getVersion());
                   } catch (KeeperException e) {
                        e.printStackTrace();
                   } catch (InterruptedException e) {
                        e.printStackTrace();
                   }
              }
          }
     }

     public static void main(String[] args) throws IOException, KeeperException, InterruptedException{
          String path = "/synctest";
          //创建zookeeper的客户端
          zk = new ZooKeeper("192.168.57.130:2181",30000,new SetDataSync());

          connectedSemaphore.await();
          System.out.println("----连接成功....");

          zk.create(path, "test".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL);
          System.out.println(new String(zk.getData(path, true, stat)));
          System.out.println(stat.getCzxid()+","+stat.getMzxid()+","+stat.getVersion());

          zk.setData(path, "up1".getBytes(), -1);
          Thread.sleep(Integer.MAX_VALUE);

     }

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值