您的位置:首页 > 编程语言 > Java开发

zookeeper java客户端简单API

2016-06-19 16:19 447 查看
要使用java的API首先在项目中添加以下的依赖

<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下载
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: