zookeeper(三):Java原生API的使用以及Watch机制

zookeeper(三):Java原生API的使用以及Watch机制

    zookeeper提供了Java调用的API,但是实现的并不是特别强大,本文做一个概念性的了解。

    一、简单说明

    导入相应的jar包后,通过zookeeper的实例就可以完成相应的zookeeper操作了。

    zookeeper的构造方法有很多,但是必须的有三个参数:

  1. 连接zookeeper的地址;
  2. sessionTimeOut:表示配置文件中的tickTime;
  3. 一个Watcher对象;

    如下图:


    二、Watcher的介绍

    zookeeper提供一个异步的事件,叫做watch,有着如下的特点:

  1. 一次性,watch事件只会在调用时发生,不保持监听,意味着只有触发watch事件时监听;
  2. 注册watch事件首先需要继承Watch类,并重写其中的process方法,为该事件的回调方法;
  3. process返回了一个WatchEvent对象,可以返回监听的内容,如:
    zookeeper的连接状态:连接,超时等;
    事件类型:节点创建,节点数据改变,子节点改变,以及无改变等等;
    监听的节点路径;

    在上图中,创建zookeeper实例时便提供了一个Wacther实例,也就意味着整个创建过程是异步的,所以需要阻塞一下,等待watch事件的回调。

    三、介绍相关的API

    在上文中我们在linux环境下,写了几个命令,Java提供的API大抵相同,无非就是增删改查,多加一个watch事件。

    先说说增,create:

    原生的zookeeper是不支持递归创建节点的,所以,Java提供的API也不能递归创建节点,同时,只支持字节数组类型的数据传入,并传入参数,设置节点是临时节点还是永久节点:


    删,delete,JavaAPI中没有提供rmr的操作,所以,也不支持递归删除,需要添加版本号,或者-1跳过版本号,提供异步删除回调机制:


    四、总结

    其实Java提供的zookeeperAPI,就是对原生操作的一个实现,大致无异,所以还不是很强大的。

猜你喜欢

转载自blog.csdn.net/that_is_cool/article/details/80917036