使用Ecplise操作ZooKeeper
在Ecplise中新建一个project,引入zookeeper文件的jar包。这些jar包在zookeeper解压文件夹下。
代码如下:
package zookeeper;
import java.io.IOException;
import org.apache.zookeeper.WatchedEvent;
import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.Watcher.Event.KeeperState;
import org.apache.zookeeper.ZooKeeper;
public class CreateSession implements Watcher {
//声明zooKeeper
private static ZooKeeper zooKeeper;
public static void main(String[] args) throws IOException, InterruptedException {
zooKeeper = new ZooKeeper("192.168.200.11", 5000, new CreateSession()); //建立连接
System.out.println(zooKeeper.getState()); //连接状态
Thread.sleep(Integer.MAX_VALUE);
}
private void doSomething() {
System.out.println("这里做事情");
}
/**
* 通过事件去操作zookeeper
* 参数:event 事件对象
*/
@Override
public void process(WatchedEvent event) {
System.out.println("收到事件:" + event);
if(event.getState() == KeeperState.SyncConnected) {
doSomething();
}
}
}
控制台:
此时已经连接到zooKeeper集群。将所作的事情在doSomething中做。
比如创建节点:
同步创建
控制台:
异步创建
控制台:
完成代码:
package zookeeper;
import java.io.IOException;
import org.apache.zookeeper.AsyncCallback.StringCallback;
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;
public class CreateSession implements Watcher {
//声明zooKeeper
private static ZooKeeper zooKeeper;
public static void main(String[] args) throws IOException, InterruptedException {
zooKeeper = new ZooKeeper("192.168.200.11", 5000, new CreateSession()); //建立连接
System.out.println(zooKeeper.getState()); //连接状态
Thread.sleep(Integer.MAX_VALUE);
}
private void doSomething() {
try {
//同步创建
//参数依次是:节点路径,节点的数据信息,权限信息,创建模式(临时或者持久)
String path = zooKeeper.create("/node_4", "123".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL);
System.out.println("return path:"+path);
//异步调用
//参数依次是:节点路径,节点的数据信息,权限信息,创建模式(临时或者持久)
zooKeeper.create("/node_6", "123".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL,new IStringCallback(),"创建");
} catch (KeeperException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
/**
* 通过事件去操作zookeeper
* 参数:event 事件对象
*/
@Override
public void process(WatchedEvent event) {
System.out.println("收到事件:" + event);
if(event.getState() == KeeperState.SyncConnected) {
doSomething();
}
}
//异步调用的回调函数接口实现
static class IStringCallback implements StringCallback{
/**
* 异步调用的回调函数
* 参数依次:返回码(调用成功返回0),需要创建的节点路径,异步调用上下文,返回的真实路径
*/
@Override
public void processResult(int rc, String path, Object ctx, String name) {
StringBuilder sb = new StringBuilder();
sb.append("rc="+rc).append("\n");
sb.append("path="+path).append("\n");
sb.append("ctx=0+ctx").append("\n");
sb.append("name="+name).append("\n");
System.out.println(sb.toString());
}
}
}