版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_37050372/article/details/81939638
需要导入的jar包有:
其中netty是用来做NIO通信的jar包。
下面是代码:
package com.test.zookeeper;
import java.io.IOException;
import org.apache.zookeeper.KeeperException;
import org.apache.zookeeper.ZooKeeper;
public class TestConnection {
public static void main(String[] args) throws IOException, KeeperException, InterruptedException {
//这里设置再多的机器也只会连接一台,但是,如果这台宕机了,就会切换到别的,这么写可以提高健壮性
String hosts = "marshal:2181,marshal01:2181,marshal02:2181,marshal03:2181,marshal04:2181,marshal05:2181";
//第二个参数为心跳时间,第三个参数为是否设置监听器
ZooKeeper zk = new ZooKeeper(hosts,2000, null);
//这里的第二个参数为是否设置监听器,第三个参数为希望得到的数据的版本,
//我们可以使用new Stat()或者直接传null就可以得到最新的版本号
byte[] data = zk.getData("/aaa/bbb", false, null);
System.out.println(new String(data));
zk.close();
}
}
成功截图:
创建节点:
public void createNode() throws KeeperException, InterruptedException, UnsupportedEncodingException {
//第一个参数:路径就是key,第二个参数:数据就是value,
//第三个参数:acl就是访问控制,第四个参数就是节点类型
//Ids是一个枚举类型
//Ids.OPEN_ACL_UNSAFE意思是开放权限,我们一般都选他
//createMode也是一个枚举类型
/**
* 创建永久节点
*/
// String create = zk.create("/eclipse","eclipse是一个好东西".getBytes("utf-8"), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
//System.out.println(create);
/**
* 创建临时节点
*/
// String create2 = zk.create("/shabi", "草泥马".getBytes("utf-8"), Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL);
// System.out.println(create2);
// Thread.sleep(8000);
/**
* 创建临时有序节点
*/
// String create3 = zk.create("/shabicaonima", "草泥马".getBytes("utf-8"), Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL_SEQUENTIAL);
// System.out.println(create3);
// Thread.sleep(8000);
/**
* 创建永久有序节点
*/
String create4 = zk.create("/shabi", "傻逼".getBytes("utf-8"), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT_SEQUENTIAL);
System.out.println(create4);
zk.close();
}
删除节点:
public void deleteNode() throws InterruptedException, KeeperException{
//-1表示删除这个数据的所有版本
zk.delete("/eclipse",-1);
zk.close();
}
修改节点:
public void setData() throws KeeperException, InterruptedException{
Stat setData = zk.setData("/shabi0000000006", "大傻逼".getBytes(), -1);
byte[] data = zk.getData("/shabi0000000006", false, null);
System.out.println(setData);
System.out.println(new String(data));
zk.close();
}
判断节点是否存在:
public void testExist() throws KeeperException, InterruptedException{
Stat stat = zk.exists("/zookeeper", false);
System.out.println(stat==null?"不存在":"存在");
zk.close();
}
获取子节点:
public void testGetChildren() throws KeeperException, InterruptedException{
List<String> childrens = zk.getChildren("/zookeeper", false);
//返回的节点只有子节点的名称,不带全路径
for (String child : childrens) {
System.out.println(child);
}
zk.close();
}
存储一个对象到zookeeper:
public void testObject() throws UnsupportedEncodingException, KeeperException, InterruptedException{
Person person = new Person();
person.setName("张三");
Gson gson = new Gson();
String json = gson.toJson(person);
String create = zk.create("/shabi", json.getBytes("utf-8"),Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
byte[] data = zk.getData("/shabi", false, null);
String data2 = new String(data);
Person p = gson.fromJson(data2, Person.class);
System.out.println(p.getName());
zk.close();
}