Zookeeper 编程

zookeeper提供了两种语言的api,一种是java的一种是c的,这里我们学习java api, c语言的api接口和java的结构是一样的。
在使用之前首先我们需要将用到的jar包放到classpath以方便编程。
这里通过运行bin/zkEnv.sh 即可将所有jar全部加入到CLASSPATH里面

. $PATH_TO_ZK/bin/zkEnv.sh
vagrant@vagrant-ubuntu-trusty-64:~$ echo $CLASSPATH
/usr/bin/../zookeeper-server/target/classes:/usr/bin/../build/classes:/usr/bin/../zookeeper-server/target/lib/*.jar:/usr/bin/../build/lib/*.jar:/usr/bin/../lib/*.jar:/usr/bin/../zookeeper-*.jar:/usr/bin/../zookeeper-server/src/main/resources/lib/*.jar:/usr/bin/../etc/zookeeper:.:/usr/lib/jvm/java-11-oracle/lib:/usr/lib/jvm/java-11-oracle/lib/tools.jar

zookeeper客户端和服务器通过建立连接,创建sesssion来交互

Zookeeper zk = new ZooKeeper(hostPort, 15000, log::info);

其中第一个参数为server的ip和端口号,如127.0.0.1:2181
第二个参数为session失效时间,单位为ms, 当ZooKeeper在指定的时间(15s)无法和client连接是,就会认为连接失效。
第三个参数是一个Watcher,用来获取并处理session相关的event。接口如下,只有一个方法,所以这里我们直接用了一个lambda表达式来表示它。

public interface Watcher {
    void process(WatchedEvent event);
}

我们再ZooKeeper basic里面介绍的那些客户端命令,都有对应的API实现版本,同步版和异步版,都有。
我们写代码的时候通常是使用异步版,因为它更好效,也不要我们来处理很多异常,代码也更简洁。所以这里我们只介绍异步版实现。

  • 创建节点
void create(String path,    byte[] data,    List<ACL> acl,   
 CreateMode createMode,    AsyncCallback.StringCallback cb,     Object ctx)

zk.create("/master", serverId.getBytes(), OPEN_ACL_UNSAFE,
                CreateMode.EPHEMERAL, this::masterCreateCallback, null);

第一个参数为要创建znode的路径,znode的数据, 第三个参数为认证方式, 第四个参数是创建模式, 第五个参数是回调函数,第六个参数是回调函数的参数。
我这里提供了一个demo程序大家可以参考,来学习这些api的使用,看代码更容易理解 git地址如下,
大家可以git clone https://github.com/Jaler-Wang/ZooKeeperDemo.git
获取。

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

推荐阅读更多精彩内容

  • 编辑| 考文学 排版 | 考文学 一、名词解释 1、宋初三体:一以当时的一些达官贵人如徐铉、李昉等为代表,以白居易...
    考文学阅读 909评论 0 1
  • iOS10,首先需要满足相关权限: 类型: 具体代码:
    酱油之神阅读 367评论 0 1
  • 正则:正规表达式 用来处理字符串单字符匹配 . 除换行之外的任意字符\d 表示数字\D 匹配非数字\w 匹配单词...
    Forever_f59e阅读 388评论 0 0
  • 余年过韶华,端晓静,性尔雅,行慎言微,与宵小无争,得失不计。 喜弄墨弹文,所暇皆顷其中,乃尝效先人,自号康名曰晴。...
    康晴阅读 4,023评论 8 13
  • 都知道今天是女神节,对于我们这种遵纪守法的公司节假日还是可以享受的,以前经常因为比较忙休不成,今天其实还好,按理...
    云沐妈妈阅读 178评论 0 0