您的位置:首页 > 其它

ZooKeeper中API常用操作

2020-06-07 05:14 183 查看

Zookeeper是一个开源的分布式的,为分布式应用提供协调服务的Apache项目。它使用一组简单的操作原语,使得分布式应用可以实现更高层次的服务——如同步、配置维护、群组和命名管理等。ZK具有高性能、高可用(复制)、有序等特征。下面是常见的zk的API操作。

import org.apache.zookeeper.*;
import org.apache.zookeeper.data.Stat;
import org.junit.Before;
import org.junit.Test;

import java.io.IOException;

public class zooTest {
private String connectString="hadoop102:2181,hadoop103:2181,hadoop104:2181";
// zk服务器连接ip和端口,多个用逗号隔开,其中2181是访问集群的端口号
private int sessionTimeout = 2000;
// 设置超时花时间,一般这个时间我们设置为2000ms
private ZooKeeper zkClient;

// 创建ZooKeeper客户端
@Before
public void init() throws IOException {

zkClient = new ZooKeeper(connectString, sessionTimeout , new Watcher() {
// watcher : 监听器(当被监控的节点发生改变时,zk会通过watcher传递给我们)
@Override
public void process(WatchedEvent event) {

}
});
}

// 创建子节点
@Test
public void create() throws Exception {

/*
参数1:要创建的节点的路径; 参数2:节点数据 ; 参数3:节点权限 ;参数4:节点的类型
对于参数2因为源码中是用字节数组,所以要用getBytes
# 关于节点的权限一共有5中
1.ANYONE_ID_UNSAFE  : 这个Id代表任何人
2.AUTH_IDS  :  此Id仅可用于设置ACL。它将被客户机身份验证所用的Id替换。
3.CREATOR_ALL_ACL  :  此ACL授予创建者身份验证id的所有权限。
4.OPEN_ACL_UNSAFE  :  这是一个完全开放的ACL。 (这个是最常用的)
5.READ_ACL_UNSAFE  : 这个ACL给了世界阅读的能力。
# 节点的类型一共有四种:
PERSISTENT :持久型节点
PERSISTENT_SEQUENTIAL :序列化的持久型节点
EPHEMERAL :短暂型节点
EPHEMERAL_SEQUENTIAL :序列化的短暂型节点
*/
String nodeCreated = zkClient.create("/beijing", "china".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
System.out.println("创建了:"+nodeCreated+"节点");

}

//获取指定节点中的信息
@Test
public void  get() throws KeeperException, InterruptedException {
byte[] datas = zkClient.getData("/beijing", false, null);
/*
stat    : 查看哪个版本的数据(节点上可能会保存多个版本的数据)
*        null: 表示获取最新版本的数据
*/

System.out.println(new String(datas));
}

//修改节点的数据
@Test
public void setdata() throws KeeperException, InterruptedException {
zkClient.setData("/beijing","hello".getBytes(),-1);
}

//删除节点并查看节点是否删除
@Test
public void deletenode() throws KeeperException, InterruptedException {
zkClient.delete("/xiyou",-1);
// -1表示删除所有的版本
Stat flag = zkClient.exists("/xiyou", false);
System.out.println(flag == null ?  "节点已经被删除" :"节点依旧存在");
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: