ZooKeeper原生Api的操作
下面是原生Api提供的一些列操作的介紹
創建一個ConnectWatcher
public class ConnectWatcher implements Watcher {
private CountDownLatch countDownLatch=null;
public void process(WatchedEvent watchedEvent) {
if(watchedEvent.getState()== Event.KeeperState.SyncConnected){
countDownLatch.countDown();
}
}
public ConnectWatcher(CountDownLatch countDownLatch){
this.countDownLatch=countDownLatch;
}
創建ZookeeperGroup類
該類主要是對zk的鏈接,使用,創建節點,刪除節點,得到節點的列表
import org.apache.zookeeper.CreateMode;
import org.apache.zookeeper.KeeperException;
import org.apache.zookeeper.ZooDefs;
import org.apache.zookeeper.ZooKeeper;
import java.util.List;
import java.io.IOException;
import java.util.concurrent.CountDownLatch;
public class ZookeeperGroup {
private static final String ZKHOST="47.106.132.60:2181,47.106.132.60:2182,47.106.132.60:2183";
private static final int SESSION_TIMEOUT= 5000;
CountDownLatch countDownLatch;
private ZooKeeper zooKeeper;
public void creat() throws IOException, InterruptedException {
countDownLatch=new CountDownLatch(1);
zooKeeper=new ZooKeeper(ZKHOST,SESSION_TIMEOUT,new ConnectWatcher(countDownLatch));
countDownLatch.await();
}
public void createRoot() throws KeeperException, InterruptedException {
String path= zooKeeper.create("/zkGroup",null, ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
System.out.println(path);
}
public void addZnode(String pathName,String data) throws KeeperException, InterruptedException {
byte[] bytes;
if(data==null){
bytes=null;
}else {
bytes=data.getBytes();
}
String path= zooKeeper.create(pathName,bytes, ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL);
System.out.println(path);
}
public void delZnode(String pathName,int version) throws KeeperException, InterruptedException {
zooKeeper.delete(pathName, version);
}
public void list(String root) throws KeeperException, InterruptedException {
List<String> childs= zooKeeper.getChildren(root,false);
for (String child:childs
) {
System.out.println(child);
}
}
}
測試類
import org.apache.zookeeper.KeeperException;
import java.io.IOException;
import java.util.concurrent.CountDownLatch;
public class TestGroup {
public static void main(String[] args) throws KeeperException, InterruptedException, IOException {
CountDownLatch countDownLatch=new CountDownLatch(1);
ZookeeperGroup zookeeperGroup=new ZookeeperGroup();
zookeeperGroup.creat();
zookeeperGroup.createRoot();
String[] pathNames={"/zkGroup/group1","/zkGroup/group2","/zkGroup/group3"};
ZookeeperGroup zookeeperGroup1;
for (int i=0;i<3;i++){
zookeeperGroup1=new ZookeeperGroup();
zookeeperGroup1.creat();
zookeeperGroup1.addZnode(pathNames[i],null);
}
countDownLatch.await();
}
}
操作ZooKeeper的原生Api需要在pom.xml文件中引入zookeeper的maven依賴
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.4.5</version>
</dependency>