zookeeper java客户端简单API
2016-06-19 16:19
447 查看
要使用java的API首先在项目中添加以下的依赖
zookeeper客户端对应的增删改查的API对应都有同步跟异步的API。
其他例子可以通过下载Demo了解,链接 Demo下载
<dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> <version>3.4.6</version> </dependency>
zookeeper客户端对应的增删改查的API对应都有同步跟异步的API。
一、同步创建节点
package com.aicong.test.helloZookeeper; import org.apache.zookeeper.AsyncCallback; import org.apache.zookeeper.CreateMode; import org.apache.zookeeper.KeeperException; import org.apache.zookeeper.WatchedEvent; import org.apache.zookeeper.Watcher; import org.apache.zookeeper.Watcher.Event.KeeperState; import org.apache.zookeeper.ZooDefs.Ids; import org.apache.zookeeper.ZooKeeper; /** * 建立连接 * * @author aicong * */ public class CreateNodeSync implements Watcher { private static ZooKeeper zookeeper; public static void main(String[] args) throws Exception { // 这里是异步连接 zookeeper = new ZooKeeper("112.74.219.174", 5000, new CreateNodeSync()); System.out.println(zookeeper.getState()); // 不给主线程结束 Thread.sleep(Integer.MAX_VALUE); } @Override public void process(WatchedEvent event) { System.out.println("收到事件," + event); // 如果建立连接 if (event.getState() == KeeperState.SyncConnected) { dosomething(); } } //异步创建节点 private void dosomething() { String path; //Ids.OPEN_ACL_UNSAFE 权限信息,所有用户有权限 //CreateMode.PERSISTENT 创建一个永久节点 //new StringCallback() 回调处理方法 //"123456" 传入回调中的字符串 zookeeper.create("/node_5", "12345".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT,new StringCallback(),"123456"); //System.out.println("do something"); } static class StringCallback implements AsyncCallback.StringCallback{ //arg0 返回码,如果成功返回0 //arg1 返回路径 //arg2 上下文 //arg3 真实路径 @Override public void processResult(int arg0, String arg1, Object arg2, String arg3) { StringBuilder sb = new StringBuilder(); sb.append("arg0=" + arg0).append("\n"); sb.append("arg1=" + arg1).append("\n"); sb.append("arg2=" + arg2).append("\n"); sb.append("arg3=" + arg3).append("\n"); System.out.println(sb.toString()); } } }
二、异步创建节点
package com.aicong.test.helloZookeeper; import org.apache.zookeeper.CreateMode; import org.apache.zookeeper.KeeperException; import org.apache.zookeeper.WatchedEvent; import org.apache.zookeeper.Watcher; import org.apache.zookeeper.Watcher.Event.KeeperState; import org.apache.zookeeper.ZooDefs.Ids; import org.apache.zookeeper.ZooKeeper; /** * 建立连接 * * @author aicong * */ public class CreateNodeASync implements Watcher { private static ZooKeeper zookeeper; public static void main(String[] args) throws Exception { // 这里是异步连接 zookeeper = new ZooKeeper("112.74.219.174:2181", 5000, new CreateNodeASync()); System.out.println(zookeeper.getState()); // 不给主线程结束 Thread.sleep(Integer.MAX_VALUE); } @Override public void process(WatchedEvent event) { System.out.println("收到事件," + event); // 如果建立连接 if (event.getState() == KeeperState.SyncConnected) { dosomething(); } } private void dosomething() { String path; try { //Ids.OPEN_ACL_UNSAFE 权限信息,所有用户有权限 //CreateMode.PERSISTENT 创建一个永久节点 path = zookeeper.create("/node_4", "12345".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT); System.out.println("return path:" + path); } catch (KeeperException | InterruptedException e) { e.printStackTrace(); } //System.out.println("do something"); } }
三、同步获取子节点
package com.aicong.test.helloZookeeper; import java.io.IOException; import java.util.List; import org.apache.zookeeper.KeeperException; import org.apache.zookeeper.WatchedEvent; import org.apache.zookeeper.Watcher; import org.apache.zookeeper.Watcher.Event.EventType; import org.apache.zookeeper.Watcher.Event.KeeperState; import org.apache.zookeeper.ZooKeeper; public class GetChildrenSync implements Watcher{ private static ZooKeeper zooKeeper; public static void main(String[] args) throws IOException, InterruptedException, KeeperException { zooKeeper = new ZooKeeper("112.74.219.174:2181",5000,new GetChildrenSync()); System.out.println(zooKeeper.getState().toString()); Thread.sleep(Integer.MAX_VALUE); } private void doSomething(ZooKeeper zooKeeper){ try { // / 获取根节点子节点 // true 是否对子节点的变化感兴趣,是否接受EventType.NodeChildrenChanged 事件 List<String> children = zooKeeper.getChildren("/", true); System.out.println(children); } catch (Exception e) { // TODO: handle exception } } @Override public void process(WatchedEvent event) { // TODO Auto-generated method stub if (event.getState()==KeeperState.SyncConnected){ //保证建立连接后执行一次 if (event.getType()==EventType.None && null==event.getPath()){ doSomething(zooKeeper); }else{ if (event.getType()==EventType.NodeChildrenChanged){ try { System.out.println(zooKeeper.getChildren(event.getPath(), true)); } catch (KeeperException e) { e.printStackTrace(); } catch (InterruptedException e) { e.printStackTrace(); } } } } } }
其他例子可以通过下载Demo了解,链接 Demo下载
相关文章推荐
- [Java] 类的初始化步骤
- java JNDI路劲配置
- java 成神之路 (二)
- struts2-拦截器(一)
- java工具类之配置文件的读取
- JAVA_ListIterator
- JavaBean和Map转换封装类
- SpringMVC文件上传实现
- Java编程中“为了性能”需做的26件事
- DispatcherServlet讲解
- Thinking in Java 第1章 对象入门 总结
- 《Java小游戏实现》:坦克大战
- eclipse 不自动编译的问题
- 基于maven的springmvc+mybatis的javaweb项目
- org.springframework.orm.hibernate3.LocalSessionFactoryBean的疑惑解决办法
- Spring MVC入门
- Java多线程继承Thread类详解第1/2页
- java利用Ant解压指定zip压缩包到指定文件夹
- spel表达式
- Java泛型详解