Zookeeper的java客户端API使用方法(五)
2017-02-20 16:07
696 查看
前面几篇博文,我们简单的介绍了一下zookeeper,如何安装zookeeper集群,以及如何使用命令行等。这篇博文我们重点来看下Zookeeper的java客户端API使用方式。
我们看一下建立会话的代码就好了。
需要我们注意就一点:ZooKeeper 允许客户端向服务端注册一个 Watcher 监听,当服务端的一些指定事件触发了这个 Watcher,那么就会向指定客户端发送一个事件通知来实现分布式的通知功能。
zookeeper的所有的API,都有同步和异步两种方式,使用异步API时,client可为每个operation设置callback,在operation被执行后,zookeeper会执行对应的callback。
下面给大家展示一下两个方式创建节点的不同。
他们的运行结果就不再给大家展示了,篇幅会比较大,我对API对zookeeper节点增删改查,都做了同步和异步的编写,大家可以在下面的链接地址中下载。
![](http://img.blog.csdn.net/20170220155441930?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaml1cWl5dWxpYW5n/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
下载地址:http://download.csdn.net/detail/jiuqiyuliang/9758784
zookeeper不支持递归创建子节点(也就是说在父节点不存在的情况下,不允许创建子节点)
zookeeper不支持递归删除(也就是说在父节点有子节点的情况下,不允许直接删除父节点)
下篇博文,我们进行zookeeper的实战部分。
创建会话
客户端可以通过创建一个Zookeeper(org.apache.zookeeper.ZooKeeper)实例来连接ZooKeeper服务器。给大家推荐一篇博文,构造方法和参数都介绍的非常的详细,看一下就好。我们看一下建立会话的代码就好了。
public class CreateSession implements Watcher{ private static ZooKeeper zookeeper; //创建一个与服务器的连接 需要(服务端的 ip+端口号)(session过期时间)(Watcher监听注册) public static void main(String[] args) throws IOException, InterruptedException { zookeeper = new ZooKeeper("127.0.0.1:2181", 5000, new CreateSession()); System.out.println(zookeeper.getState()); Thread.sleep(Integer.MAX_VALUE); } private void doSomething(){ System.out.println("do something"); } @Override public void process(WatchedEvent event) { System.out.println("Receive watched event:" + event); if(event.getState() == KeeperState.SyncConnected){ System.out.println("ZooKeeper session established."); doSomething(); } } }
需要我们注意就一点:ZooKeeper 允许客户端向服务端注册一个 Watcher 监听,当服务端的一些指定事件触发了这个 Watcher,那么就会向指定客户端发送一个事件通知来实现分布式的通知功能。
zookeeper的所有的API,都有同步和异步两种方式,使用异步API时,client可为每个operation设置callback,在operation被执行后,zookeeper会执行对应的callback。
下面给大家展示一下两个方式创建节点的不同。
同步创建节点
public class CreateNodeSync implements Watcher{ private static ZooKeeper zookeeper; //创建一个与服务器的连接 需要(服务端的 ip+端口号)(session过期时间)(Watcher监听注册) public static void main(String[] args) throws IOException, InterruptedException { zookeeper = new ZooKeeper("127.0.0.1:2181", 5000, new CreateNodeSync()); System.out.println(zookeeper.getState()); Thread.sleep(Integer.MAX_VALUE); } /** * 创建Znode * CreateMode: * PERSISTENT (持续的,相对于EPHEMERAL,不会随着client的断开而消失) * PERSISTENT_SEQUENTIAL(持久的且带顺序的) * EPHEMERAL (短暂的,生命周期依赖于client session) * EPHEMERAL_SEQUENTIAL (短暂的,带顺序的) */ private void doSomething(){ try { String path = zookeeper.create("/node_2", "123".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT); System.out.println("return path:" + path); } catch (KeeperException e) { e.printStackTrace(); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("do something"); } @Override public void process(WatchedEvent event) { System.out.println("Receive watched event:" + event); if(event.getState() == KeeperState.SyncConnected){ doSomething(); } } }
异步创建节点
public class CreateNodeASync implements Watcher { private static ZooKeeper zookeeper; //创建一个与服务器的连接 需要(服务端的 ip+端口号)(session过期时间)(Watcher监听注册) public static void main(String[] args) throws IOException, InterruptedException { zookeeper = new ZooKeeper("127.0.0.1:2181", 5000, new CreateNodeASync()); System.out.println(zookeeper.getState()); Thread.sleep(Integer.MAX_VALUE); } private void doSomething() { zookeeper.create("/node_1", "123".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT, new IStringCallback(), "this is content"); System.out.println("do something"); } @Override public void process(WatchedEvent event) { System.out.println("Receive watched event:" + event); if (event.getState() == KeeperState.SyncConnected) { doSomething(); } } static class IStringCallback implements AsyncCallback.StringCallback { @Override public void processResult(int rc, String path, Object ctx, String name) { System.out.println("rc:" + rc); System.out.println("path:" + path); System.out.println("ctx:" + ctx); System.out.println("name:" + name); } } }
他们的运行结果就不再给大家展示了,篇幅会比较大,我对API对zookeeper节点增删改查,都做了同步和异步的编写,大家可以在下面的链接地址中下载。
下载
下载地址:http://download.csdn.net/detail/jiuqiyuliang/9758784
总结:
在这里api对zookeeper节点进行增删改查,有同步和异步的方zookeeper不支持递归创建子节点(也就是说在父节点不存在的情况下,不允许创建子节点)
zookeeper不支持递归删除(也就是说在父节点有子节点的情况下,不允许直接删除父节点)
下篇博文,我们进行zookeeper的实战部分。
相关文章推荐
- zookeeper Java客户端API的使用方法
- Zookeeper的java客户端API使用方法(五)
- ZooKeeper之Java客户端API使用—创建节点。
- ZooKeeper之Java客户端API使用—检测节点是否存在
- 【ZooKeeper】Java客户端API使用介绍。
- Zookeeper-Java客户端API的基本使用
- 使用Java客户端API操作Zookeeper
- ZooKeeper之Java客户端API使用—更新数据。
- ZooKeeper之Java客户端API使用—权限控制。
- ZooKeeper之Java客户端API使用—删除节点。
- 六:ZooKeeper的java客户端api的使用
- ZooKeeper之Java客户端API使用—读取数据。
- ZooKeeper之Java客户端API使用—创建会话。
- zookeeper(二) java客户端api的使用
- Zookeeper(四)Java客户端API使用
- ZooKeeper 学习 (四) ZooKeeper Java客户端API使用
- smartweather API 使用java 生成key的方法
- JAVA学习第三十课(经常使用对象API)- String类:类方法练习
- Java String之StringBuffer以及它的API的详细使用方法
- java中String的API使用方法