zoukankan      html  css  js  c++  java
  • (34)zookeeper的java客户端api

    1.创建Java工程: 

    右击 - New - Java Project

    2.加入依赖包:

    在Java Project下建立lib文件夹,拖入需要的jar包(包括/root/apps/zookeeper-3.4.5文件夹下的 zookeeper-3.4.5.jar 和 /lib下的.jar包)

    选中lib下的所有jar包,右击 - BuildPath - add to build path

    3.建立Java Class,开始编写zookeeper客户端:

    找到src目录,右击 - New Class 

    java客户端用于对数据的增,删,改,查,监听,并做出适当的响应

    代码:

    public class SimplezkClient {

           private static final String connectString="192.168.179.200:2181,192.168.179.201:2181,192.168.179.202:2181";

           private static final int sessionTimeout = 2000;

           ZooKeeper zkClient = null;

           @before

           public void init() throws Exception{

                  // 客户端api对象  参数依次为:连接字符串(zookeeper服务器的地址,可以加入多个服务器),会话超时,监听器

                  zkClient = new ZooKeeper(connectString,sessionTimeout,new Watcher() {

                         @Override
                         public void process(WatchedEvent event) {

                                // 收到事件通知后的回调函数(事件处理逻辑)
                               System.out.println(event.getType() + "---" + event.getPath());

                               try {

                                    zkClient.getChildren("/", true);    //再次绑定监听器,因为监听器只生效一次。这样做可以实现永久的监听
                               } catch (Exception e) {
                               }


                         }

                  });

           }

           // 数据的增删改查

           // 创建数据节点到zk中

           public void testCreate() throws KeeperException, InterruptedException{

                 // 创建节点,参数依次为:节点路径,节点保存的数据,节点的权限和节点类型,返回所创建节点的路径

                 String nodeCreated = zkClient.create("/eclipse", "hellozk".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);

                //上传的数据可以是任何类型,但都要转成byte[]

           }

          // 获取子节点

          @Test
          public void getChildren() throws Exception {
                 List<String> children = zkClient.getChildren("/", true);   # true: 绑定zkClient对象的监听器,监听"/"节点的子节点更新事件,监听器只通知(生效)一次
                 for (String child : children) {
                       System.out.println(child);
                  }
                Thread.sleep(Long.MAX_VALUE);  // 阻止程序退出
          }

          // 判断znode是否存在
          @Test
         public void testExist() throws Exception{
               Stat stat = zkClient.exists("/eclipse", false);  # 不绑定监听器(监听节点被删除事件),如果节点不存在,返回null;如果节点存在,返回该节点的元数据
               System.out.println(stat==null?"not exist":"exist");
          }

          // 获取znode的数据
          @Test
          public void getData() throws Exception {

                 byte[] data = zkClient.getData("/eclipse", false, null);  # 不绑定监听器(监听节点上数据改变事件) , 返回二进制类型的数据,null表示获取的是最新的版本
                 System.out.println(new String(data));

           }
           //删除znode

          @Test

          public void deleteZnode() throws Exception {

                 //参数2:指定要删除的版本,-1表示删除所有版本
                 zkClient.delete("/eclipse", -1);
          }

         //修改znode的数据
         @Test
         public void setData() throws Exception {

                zkClient.setData("/app1", "imissyou angelababy".getBytes(), -1);   # -1表示修改所有版本的数据

                byte[] data = zkClient.getData("/app1", false, null);
               System.out.println(new String(data));

         }

    }

    客户端监听器工作原理:

    listen线程和connect线程都是守护线程。

    Java的线程分为两种类型:普通线程和守护线程。

    当主线程执行完毕时,若有普通线程还在运行,则主线程不会退出;若其他在运行的线程都是守护线程,则主线程退出。

  • 相关阅读:
    Could A New Linux Base For Tablets/Smartphones Succeed In 2017?
    使用libhybris,glibc和bionic共存时的TLS冲突的问题
    6 Open Source Mobile OS Alternatives To Android in 2018
    Using MultiROM
    GPU drivers are written by the GPU IP vendors and they only provide Android drivers
    Jolla Brings Wayland Atop Android GPU Drivers
    How to Use Libhybris and Android GPU Libraries with Mer (Linux) on the Cubieboard
    闲聊Libhybris
    【ARM-Linux开发】wayland和weston的介绍
    Wayland and X.org problem : Why not following the Android Solution ?
  • 原文地址:https://www.cnblogs.com/paradis/p/11392483.html
Copyright © 2011-2022 走看看