`

zkClient

 
阅读更多

直接使用zk的api实现业务功能比较繁琐。因为要处理session loss,session expire等异常,在发生这些异常后进行重连。又因为ZK的watcher是一次性的,如果要基于wather实现发布/订阅模式,还要自己包装一下,将一次性订阅包装成持久订阅。另外如果要使用抽象级别更高的功能,比如分布式锁,leader选举等,还要自己额外做很多事情。这里介绍下ZK的第三方客户端包装小工具,可以分别解决上述小问题。

zkClient

zkClient主要做了两件事情。一件是在session loss和session expire时自动创建新的ZooKeeper实例进行重连。另一件是将一次性watcher包装为持久watcher。后者的具体做法是简单的在watcher回调中,重新读取数据的同时再注册相同的watcher实例。

zkClient简单的使用样例如下:

public static void testzkClient(final String serverList) {
        ZkClient zkClient4subChild = new ZkClient(serverList);
        zkClient4subChild.subscribeChildChanges(PATH, new IZkChildListener() {
            @Override
            public void handleChildChange(String parentPath, List currentChilds) throws Exception {
                System.out.println(prefix() + "clildren of path " + parentPath + ":" + currentChilds);
            }
        });

上面是订阅children变化,下面是订阅数据变化

ZkClient zkClient4subData = new ZkClient(serverList);
        zkClient4subData.subscribeDataChanges(PATH, new IZkDataListener() {
            @Override
            public void handleDataChange(String dataPath, Object data) throws Exception {
                System.out.println(prefix() + "Data of " + dataPath + " has changed");
            }

            @Override
            public void handleDataDeleted(String dataPath) throws Exception {
                System.out.println(prefix() + dataPath + " has deleted");
            }
        });

订阅连接状态的变化:

ZkClient zkClient4subStat = new ZkClient(serverList);
        zkClient4subStat.subscribeStateChanges(new IZkStateListener() {
            @Override
            public void handleNewSession() throws Exception {
                System.out.println(prefix() + "handleNewSession()");
            }

            @Override
            public void handleStateChanged(KeeperState stat) throws Exception {
                System.out.println(prefix() + "handleStateChanged,stat:" + stat);
            }
        });

zkClient除了做了一些便捷包装之外,对watcher使用做了一点增强。比如subscribeChildChanges实际上是通过exists和getChildren关注了两个事件。这样当create(“/path”)时,对应path上通过getChildren注册的listener也会被调用。另外subscribeDataChanges实际上只是通过exists注册了事件。因为从上表可以看到,对于一个更新,通过exists和getData注册的watcher要么都会触发,要么都不会触发

分享到:
评论

相关推荐

    zkclient-0.10-API文档-中文版.zip

    赠送jar包:zkclient-0.10.jar; 赠送原API文档:zkclient-0.10-javadoc.jar; 赠送源代码:zkclient-0.10-sources.jar; 赠送Maven依赖信息文件:zkclient-0.10.pom; 包含翻译后的API文档:zkclient-0.10-javadoc-...

    zkclient-2.1.1.rar

    《深入理解ZkClient:基于zkclient-2.1.1.jar的探索》 ZkClient,全称为Zookeeper Client,是一款广泛应用于Java环境中的Zookeeper客户端工具,它提供了更高级别的API,使得与Zookeeper服务器的交互变得更加简单和...

    zkclient 1.0 源码包

    **Zkclient 1.0 源码包详解** Zkclient 是一个针对 Apache ZooKeeper 的轻量级客户端库,由淘宝官方提供,广泛应用于分布式协调服务中。ZooKeeper 是一个分布式的,开放源码的分布式应用程序协调服务,它是集群的...

    zkclient各版本型号.rar

    ZKClient是一款基于Java的 ZooKeeper 客户端库,它为开发者提供了更方便的接口来操作和管理Zookeeper集群。Zookeeper是一个分布式协调服务,广泛应用于分布式系统中,如配置管理、命名服务、分布式锁、集群管理等。...

    zkclient-0.3.jar

    《深入理解ZKClient:基于zkclient-0.3.jar的探索》 ZKClient,全称为Zookeeper Client,是一款广泛应用于分布式环境中的客户端库,主要用于与Apache ZooKeeper进行交互。ZooKeeper是一个分布式的、开放源码的...

    zkclient-0.8-API文档-中文版.zip

    赠送jar包:zkclient-0.8.jar; 赠送原API文档:zkclient-0.8-javadoc.jar; 赠送源代码:zkclient-0.8-sources.jar; 赠送Maven依赖信息文件:zkclient-0.8.pom; 包含翻译后的API文档:zkclient-0.8-javadoc-API...

    zookeeper客户端zkClient操作示例

    在"zookeeper客户端zkClient操作示例"中,我们可以学习到如何在Java应用中使用zkClient来实现ZooKeeper的各种操作。以下是一些关键的知识点: 1. **ZooKeeper数据模型**: ZooKeeper的数据模型类似于文件系统,由...

    zkclient-0.10-API文档-中英对照版.zip

    赠送jar包:zkclient-0.10.jar; 赠送原API文档:zkclient-0.10-javadoc.jar; 赠送源代码:zkclient-0.10-sources.jar; 赠送Maven依赖信息文件:zkclient-0.10.pom; 包含翻译后的API文档:zkclient-0.10-javadoc-...

    zkclient-0.1-API文档-中文版.zip

    赠送jar包:zkclient-0.1.jar; 赠送原API文档:zkclient-0.1-javadoc.jar; 赠送源代码:zkclient-0.1-sources.jar; 包含翻译后的API文档:zkclient-0.1-javadoc-API文档-中文(简体)版.zip 对应Maven信息:...

    zookeeper开源客户端ZkClient使用

    ZkClient是Github上一个开源的ZooKeeper客户端。ZkClient在ZooKeeper原生 API接口之上进行了包装,是一个更加易用的ZooKeeper客户端。同时,ZkClient在内部实现了诸如Session超时重连、Watcher反复注册等功能。

    zkclient-0.10

    《深入理解ZKClient:基于zkclient-0.10版本》 ZKClient是一款针对Apache ZooKeeper(简称ZooKeeper)的客户端工具,由LinkedIn开源,它为开发者提供了更简单、更方便的方式来操作ZooKeeper。在本文中,我们将深入...

    完整jar包资源,COULD NOT FIND zkclient,包缺失使用

    在本资源分享中,我们面临的问题是关于`zkclient`的缺失,这通常意味着项目中引用了该库,但在构建时无法找到对应的JAR包。`zkclient`是针对ZooKeeper的一个客户端库,用于简化对ZooKeeper的操作。 **ZooKeeper**:...

    zkclient jar包

    ZKClient是一款针对Apache ZooKeeper的Java客户端库,它提供了比ZooKeeper原生API更为高级和方便的接口,使得开发者在使用ZooKeeper时能够更高效地进行数据操作和监控。ZooKeeper是一个分布式协调服务,常用于管理...

    zookeeper_demo maven项目:包含原生API、zkclient、Curator操作

    《Zookeeper原生API、ZkClient与Curator在分布式协调中的应用》 Apache ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,它是集群的管理者,监视着集群中各个节点的状态根据节点提交的反馈进行下一步...

    zkclient文档

    ### zkclient文档知识点详解 #### 一、zkclient简介及背景 ZkClient是一个由Datameer工程师开发的开源客户端库,它旨在简化ZooKeeper客户端的使用过程,通过封装ZooKeeper原生API,提供了更为简洁易用的接口。在...

    zkclient-0.8.jar

    zkclient-0.8 2016新的jar包

    zkclient-2.1.1.jar

    zkclient-2.1.1.jar

    zkclient-0.2.jar

    zkclient-0.2.jar

    ZookeeperJava客户端zkclient.zip

    简单、高效的Zookeeper Java客户端。 让Zookeeper API 使用起来更简单 非常方便订阅各种事件并自动重新绑定事件(会话建立、节点修改、节点删除、子节点变更等) session过期自动重连、机制 ... 标签:zkclient

Global site tag (gtag.js) - Google Analytics