zookeeper(三):Java原生API的使用以及Watch机制
zookeeper提供了Java调用的API,但是实现的并不是特别强大,本文做一个概念性的了解。
一、简单说明
导入相应的jar包后,通过zookeeper的实例就可以完成相应的zookeeper操作了。
zookeeper的构造方法有很多,但是必须的有三个参数:
- 连接zookeeper的地址;
- sessionTimeOut:表示配置文件中的tickTime;
- 一个Watcher对象;
如下图:
二、Watcher的介绍
zookeeper提供一个异步的事件,叫做watch,有着如下的特点:
- 一次性,watch事件只会在调用时发生,不保持监听,意味着只有触发watch事件时监听;
- 注册watch事件首先需要继承Watch类,并重写其中的process方法,为该事件的回调方法;
- process返回了一个WatchEvent对象,可以返回监听的内容,如:
zookeeper的连接状态:连接,超时等;
事件类型:节点创建,节点数据改变,子节点改变,以及无改变等等;
监听的节点路径;
在上图中,创建zookeeper实例时便提供了一个Wacther实例,也就意味着整个创建过程是异步的,所以需要阻塞一下,等待watch事件的回调。
三、介绍相关的API
在上文中我们在linux环境下,写了几个命令,Java提供的API大抵相同,无非就是增删改查,多加一个watch事件。
先说说增,create:
原生的zookeeper是不支持递归创建节点的,所以,Java提供的API也不能递归创建节点,同时,只支持字节数组类型的数据传入,并传入参数,设置节点是临时节点还是永久节点:
删,delete,JavaAPI中没有提供rmr的操作,所以,也不支持递归删除,需要添加版本号,或者-1跳过版本号,提供异步删除回调机制:
四、总结
其实Java提供的zookeeperAPI,就是对原生操作的一个实现,大致无异,所以还不是很强大的。