java zookeeper_Java操作Zookeeper

packagecom.zhi.test;importjava.util.List;importorg.apache.logging.log4j.LogManager;importorg.apache.logging.log4j.Logger;importorg.apache.zookeeper.CreateMode;importorg.apache.zookeeper.WatchedEvent;importorg.apache.zookeeper.Watcher;importorg.apache.zookeeper.ZooDefs.Ids;importorg.apache.zookeeper.ZooKeeper;importorg.apache.zookeeper.data.Stat;importorg.junit.jupiter.api.AfterAll;importorg.junit.jupiter.api.BeforeAll;importorg.junit.jupiter.api.MethodOrderer;importorg.junit.jupiter.api.Order;importorg.junit.jupiter.api.Test;importorg.junit.jupiter.api.TestInstance;importorg.junit.jupiter.api.TestInstance.Lifecycle;importorg.junit.jupiter.api.TestMethodOrder;/*** Zookeeper操作测试

*

*@author张远志

*@since2020年5月3日14:31:28

**/@TestInstance(Lifecycle.PER_CLASS)

@TestMethodOrder(MethodOrderer.OrderAnnotation.class)public classZookeeperTest {private final Logger logger = LogManager.getLogger(this.getClass());privateZooKeeper zooKeeper;private final String path = "/test";

@BeforeAllpublic void init() throwsException {

zooKeeper= new ZooKeeper("192.168.59.131:2181", 60000, newWatcher() {public voidprocess(WatchedEvent event) {

logger.info("事件类型:{},路径:{}", event.getType(), event.getPath());

}

});

}/*** 添加数据,当路径已经存在时会报错,初始版本号为0。第三个参数是权限控制。

* 第四个参数,CreateMode:

*

PERSISTENT:持久化保存

*

PERSISTENT_SEQUENTIAL:持久化保存,并且路径附加一个自动增长的序号

*

EPHEMERAL:临时数据,客户端断开连接时自动删除数据(dubbo就是采用这种机制)

*

EPHEMERAL_SEQUENTIAL:客户端断开连接时自动删除数据,并且路径会附加一个自动增长的序号

*

CONTAINER:

*

PERSISTENT_WITH_TTL:客户端断开连接时自动删除数据,当节点在指定时间没有被修改且没有子目录时,数据会被删除

*

PERSISTENT_SEQUENTIAL_WITH_TTL:客户端断开连接时自动删除数据,路径会附加一个自动增长的序号,且当节点在指定时间没有被修改且没有子目录时,数据会被删除*/@Order(1)

@Testpublic voidcreate() {try{

String back= zooKeeper.create(path, "这是一个测试".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);

logger.info("添加一条数据成功,实际路径:{}", back);

}catch(Exception e) {

logger.error("调用create出错", e);

}

}/*** 判断路径是否存在,不存在时返回null*/@Order(2)

@Testpublic voidexists() {try{

Stat stat= zooKeeper.exists(path, false);

logger.info("路径为{}的节点{}存在", path, stat == null ? "不" : "");

}catch(Exception e) {

logger.error("调用exists出错", e);

}

}/*** 查询数据,路径不存在时会报错*/@Order(3)

@Testpublic voidfind() {try{byte[] bits = zooKeeper.getData(path, false, new Stat()); //路径不存在时会报错

String data = newString(bits);

logger.info("路径{}查询到数据:{}", path, data);

}catch(Exception e) {

logger.error("调用getData出错", e);

}

}/*** 获取子目录,结果为空时返回一个长度为0的ArrayList*/@Order(3)

@Testpublic voidchildren() {try{

List list = zooKeeper.getChildren(path, false);

logger.info("路径{}的子目录有:{}", path, String.join("、", list.toArray(new String[0])));

}catch(Exception e) {

logger.error("调用getChildren出错", e);

}

}/*** 修改数据,路径不存在时会报错,版本号与存储中不一致时也报错*/@Order(4)

@Testpublic voidudpate() {try{

Stat stat= zooKeeper.exists(path, false);if (stat != null) {

stat= zooKeeper.setData(path, "这是一个修改测试".getBytes(), stat.getVersion()); //版本号为-1时不做版本校验

logger.info("数据修改成功,原版本号:{},新版本号:{}", stat.getAversion(), stat.getVersion());

}

}catch(Exception e) {

logger.error("调用setData出错", e);

}

}/*** 删除节点,路径不存在时报错,版本号不一致时也会报错*/@Order(5)

@Testpublic voiddelete() {try{

zooKeeper.delete(path,-1); //-1表示不做版本校验

logger.info("根据path删除数据成功");

}catch(Exception e) {

logger.error("调用delete出错", e);

}

}

@AfterAllpublic void destory() throwsException {if (zooKeeper != null) {

zooKeeper.close();

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值