Zookeeper开发入门篇一:一个简单的监听器示例

A Simple Watch Client:一个简单的监听器示例

功能:通过读取Znode的数据来启动某个服务。并且动态监听Znode变更事件,如果znode发生变化,则传入新数据并重启服务,如果节点被删除,则服务停止.需要传入几个参数:Zookeeper服务端地址、Znode名称、用于写数据的文件、带参数的执行体

设计:实现两个工具类,Executor用于保持会话,并且提供某个可执行服务。DataMonitor用于监听数据变化

辅助文件:数据文件A用于存储从znode里获取的数据,指令文件B用于通过Java exec调用

Executor Class:分为5部分

Eexcutor:继承了Watcher接口,实现了process方法,用于事件回调。继承了runnable接口,实现run方法,用于保证客户端不退出。继承自定义的DataMonotorListener接口,实现了exists和closing方法。当znode创建或者删除时会触发调用exists方法,当会话过期时会触发closing方法。

DataMonitor class:主要分为3部分


再来看下执行过程

首先启动服务,这个时候zookeeper不存在/test 这个节点。会看到如下输出:


创建/test:然后在zookeeper服务端创建/test ,create /test "data1",然后看到客户端输出:


更改/test 的值:set /test "data2",然后看到客户端输出:


删除/test,:delete /test,看到如下输出:


并且看下本地数据文件里写入的内容:


至于说,当znode状态发生变化如何回调watcher的process方法,以及异步请求完成后如何自动回调StatCallback的processResult方法,我们在另一篇源码分析里来一探究竟

参考文章:http://zookeeper.apache.org/doc/current/javaExample.html

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容