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
获取。
网友评论