zookeeper数据结构:
java操作单机版zookeeper
官网下载zookeeper
找到zookeeper bin目录下的 zkServer.cmd
双击启动,如果启动不成功,在conf目录下复制zoo_sample.cfg,改名为zoo.cfg即可
再次启动,再启动zkCli.cmd
启动成功后,打开ZooInspector下build目录下的
出现以下页面则成功
java 操作 zookeeper:
导入依赖:
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.4.6</version>
</dependency>
package com.uban.test01;
import java.io.IOException;
import java.util.concurrent.CountDownLatch;
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.EventType;
import org.apache.zookeeper.Watcher.Event.KeeperState;
import org.apache.zookeeper.ZooDefs.Ids;
import org.apache.zookeeper.ZooKeeper;
public class Test01 {
private static final String address="127.0.0.1:2181";
private static final int session_outtime=2000;
private static final CountDownLatch countDownLatch=new CountDownLatch(1);
public static void main(String[] args) throws IOException, KeeperException, InterruptedException {
ZooKeeper zooKeeper = new ZooKeeper(address, session_outtime,new Watcher() {
//守护线程
public void process(WatchedEvent event) {
// TODO Auto-generated method stub
KeeperState state = event.getState();
if (KeeperState.SyncConnected==state) {
EventType type = event.getType();
if (type==EventType.None) {
try {
Thread.sleep(3000);
} catch (Exception e) {
// TODO: handle exception
}
countDownLatch.countDown();
System.out.println("zk开始启动连接");
}
}
}
});
//阻塞,直到countDownLatch为0释放
countDownLatch.await();
//主线程
//创建永久节点
// String create = zooKeeper.
// create("/last2", "lasting".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
// System.out.println("新增节点信息:"+create);
//zooKeeper.close();
//创建临时节点
String create = zooKeeper.
create("/last2", "temp".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL);
System.out.println("新增节点信息:"+create);
//连接关闭后,临时节点会被删除
//Thread.sleep(5000);
}
}
运行,查看zooinspector,出现新的节点,则成功
使用switcher监视节点变化:
package com.uban.test01;
import java.io.IOException;
import java.lang.Thread.State;
import java.util.concurrent.CountDownLatch;
import org.apache.zookeeper.CreateMode;
import org.apache.zookeeper.KeeperException;
import org.apache.zookeeper.WatchedEvent;
import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.ZooDefs.Ids;
import org.apache.zookeeper.ZooKeeper;
import org.apache.zookeeper.data.Stat;
import org.apache.zookeeper.Watcher.Event.EventType;
import org.apache.zookeeper.Watcher.Event.KeeperState;
public class Test02 implements Watcher {
private static final String address="127.0.0.1:2181";
private static final int session_outtime=2000;
private static final CountDownLatch countDownLatch=new CountDownLatch(1);
ZooKeeper zk;
//创建连接
public void createConnection(String connectString,int sessionTimeout) throws IOException {
zk=new ZooKeeper(connectString, sessionTimeout, this);
countDownLatch.countDown();
System.out.println("zk开始启动连接");
}
public boolean createNode(String path,String data) {
// TODO Auto-generated method stub
try {
exist(path, true);
countDownLatch.await();
String create = zk.
create(path, data.getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
System.out.println("新增节点,path:"+path+"data:"+data);
return true;
}catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
return false;
}
}
public Stat exist(String path,boolean iswathch) {
try {
return zk.exists(path, iswathch);
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
return null;
}
}
//事件通知
public void process(WatchedEvent event) {
System.out.println("开始");
// TODO Auto-generated method stub
//获取事件状态
KeeperState state = event.getState();
//获取节点路径
String path=event.getPath();
//获取事件类型
EventType type = event.getType();
System.out.println(state+" "+path+" "+type);
if (KeeperState.SyncConnected==state) {
if (type==EventType.None) {
countDownLatch.countDown();
}else if (type==EventType.NodeCreated) {
System.out.println("获取事件通知,新增Node节点"+path);
}
}
System.out.println("结束");
}
public boolean upadateNode(String path,String data) {
try {
exist(path, true);
zk.setData(path, data.getBytes(), -1);
return true;
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
return false;
}
}
public void close() {
if (zk!=null) {
try {
zk.close();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public static void main(String[] args) throws IOException {
Test02 test02 = new Test02();
test02.createConnection(address, session_outtime);
test02.createNode("/test/001", "001");
test02.close();
}
}