ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务框架.本文主要针对ZooKeeper提供的Java API.
搭建开发环境
ZooKeeper 的压缩包中,已经提供所需的Jar文件。这里我们用Maven搭建环境。在POM文件中,加入
zookeeper
依赖:
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.5.0-alpha</version>
</dependency>
Java API
对 ZooKeeper 的访问都封装在 org.apache.zookeeper.
ZooKeeper 类中。要先建立到Zookeeper的连接Session,之后的操作都是基于这个Session执行的。
public class SimpleZookeeper implements Watcher {
private static final Logger LOG = LoggerFactory.getLogger(SimpleZookeeper.class);
private static final int SESSION_TIMEOUT = 15000;
private static final String CONNECTION_STRING = "10.58.69.142:2181";
private ZooKeeper zk;
public static void main(String[] args) throws IOException, InterruptedException, KeeperException {
SimpleZookeeper master = new SimpleZookeeper();
master.startZk();
Thread.sleep(30000);
master.stopZk();
}
public void startZk() throws IOException {
zk = new ZooKeeper(CONNECTION_STRING, SESSION_TIMEOUT, this);
}
public void stopZk() throws InterruptedException {
zk.close();
}
@Override
public void process(WatchedEvent event) {
System.out.println("收到事件通知:" + event.getState() + "\n");
}
}
创建节点
public void runForMaster(){
try {
zk.create("/master", //1
"master".getBytes(), //2
ZooDefs.Ids.OPEN_ACL_UNSAFE, //3
CreateMode.EPHEMERAL); //4
} catch (KeeperException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
1 要创建的znode 的路径
2 znode 的数据,
3 访问控制权限,这里指定最低级别的权限
4 节点类型
读取节点
public void checkMaster(){
try {
Stat stat = new Stat();
byte[] data = zk.getData("/master", //1
false, //2
stat); //3
} catch (KeeperException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
1 znode 的路径
2 是否监控节点的内容
ZooKeeper 类中还有些其它方法,就不一一列举。