Java api zookeeper
package com.redis.demo.zookeeper;
import java.io.Serializable;
public class User implements Serializable {
private Integer id;
private String name;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
package com.redis.demo.zookeeper; import org.I0Itec.zkclient.exception.ZkMarshallingError;
import org.I0Itec.zkclient.serialize.ZkSerializer; import java.io.UnsupportedEncodingException; public class MyZkSerializer implements ZkSerializer { String charset = "UTF-8"; @Override
public byte[] serialize(Object o) throws ZkMarshallingError {
// return new byte[0];
try {
return String.valueOf(o).getBytes(charset);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
throw new ZkMarshallingError();
} } @Override
public Object deserialize(byte[] bytes) throws ZkMarshallingError {
try {
return new String(bytes,charset);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
throw new ZkMarshallingError();
}
}
}
package com.redis.demo.zookeeper; import org.I0Itec.zkclient.IZkChildListener;
import org.I0Itec.zkclient.IZkDataListener;
import org.I0Itec.zkclient.ZkClient;
import org.I0Itec.zkclient.serialize.SerializableSerializer;
import org.apache.zookeeper.CreateMode;
import org.apache.zookeeper.data.Stat; import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.TimeUnit; public class ZooUtil {
public static void main(String[] args) {
List<String> ll = new ArrayList<String>();
ZkClient zkClient = new ZkClient("124.220.163.230:2181", 30000, 30000);//new SerializableSerializer()
//java.lang.String cannot be cast to com.redis.demo.zookeeper.User
//跟编码类型有关系
// zkClient.setZkSerializer(new MyZkSerializer());
zkClient.setZkSerializer(new SerializableSerializer());
/**
* 获取子目录下的数据
*/
List<String> l = zkClient.getChildren("/");
for (String s : l) {
System.out.println("获取子目录下的数据=" + s);
} /**
* 创建节点,无需重复创建
*/
// zkClient.createPersistent("/testJava1"); /**
* 创建子节点
*/
// zkClient.createPersistent("/testJava1/test", true); /**
* 不允许重复创建
* org.apache.zookeeper.KeeperException$NodeExistsException: KeeperErrorCode = NodeExists for /testJava1
*
*/
/**
* 创建并设置节点的值
*/
// zkClient.createPersistent("/testJava1", "aaaa"); /**
* 写数据,即更新数据,会update,不会append
*/
// zkClient.writeData("/testJava1", "hello"); /**
* 写一个对象,要序列化
* User implements Serializable
*/
// User user = new User();
// user.setId(1);
// user.setName("liudehua");
// zkClient.create("/testJava3", user, CreateMode.PERSISTENT); /**
* 删除节点
*/
// zkClient.delete("/testJava1"); /**
* 递归删除节点和其子节点
*/
// zkClient.deleteRecursive("/testJava1"); /**
* 读取数据对象
*
* 测试类打印输出:
* 获取子目录下的数据=testJava2
* id=1
* name=liudehua
*/
Stat stat = new Stat();
User u = zkClient.readData("/testJava3", stat);
System.out.println("id=" + u.getId());
System.out.println("name=" + u.getName()); /**
* 读取简单类型数据
*/
// String s = zkClient.readData("/testJava1");
// System.out.println("读取简单类型数据="+s); /**
* 判断节点是否存在
*/
boolean b = zkClient.exists("/testJava1");
System.out.println("判断节点是否存在="+b); /**
* 监听节点的变化,节点增加,删除,减少
*/
zkClient.subscribeChildChanges("/testJava1", new IZkChildListener() {
@Override
public void handleChildChange(String parentPath, List<String> currentChilds) throws Exception {
System.out.println("parentPath = " + parentPath); }
});
/**
* 监听节点数据的变化,子节点数据变化不会监听到
*/
zkClient.subscribeDataChanges("/testJava1", new IZkDataListener() {
//数据变化时触发 /**
* 模拟打印,需要间隔时间,在cli客户端没有触发??
* handleDataChange path = /testJava1,data = one
* handleDataChange path = /testJava1,data = two
* handleDataChange path = /testJava1,data = three
*
* @param dataPath
* @param data
* @throws Exception
*/
@Override
public void handleDataChange(String dataPath, Object data) throws Exception {
System.out.println("handleDataChange path = "+ dataPath +",data = " + data);
} /**
* 测试打印输出
* parentPath = /testJava1
* handleDataDeleted path = /testJava1
*
* @param dataPath
* @throws Exception
*/
//节点删除时触发
@Override
public void handleDataDeleted(String dataPath) throws Exception {
System.out.println("handleDataDeleted path = " + dataPath);
}
}); zkClient.writeData("/testJava1", "one");
try {
TimeUnit.SECONDS.sleep(2);
} catch (InterruptedException e) {
e.printStackTrace();
}
zkClient.writeData("/testJava1", "two");
try {
TimeUnit.SECONDS.sleep(2);
} catch (InterruptedException e) {
e.printStackTrace();
}
zkClient.writeData("/testJava1", "three");
try {
TimeUnit.SECONDS.sleep(2);
} catch (InterruptedException e) {
e.printStackTrace();
}
//KeeperErrorCode = Directory not empty for /testJava1
// zkClient.delete("/testJava1");
//需要递归删除
zkClient.deleteRecursive("/testJava1"); //测试监听的变化,通过线程来延时。
try {
Thread.sleep(1000*60*15);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
测试发现:在java api操作变更,能监听到变化。但是在ZkClient操作,idea控制台没有反应!! watch没有变化,在ZkClient操作。

Java api zookeeper的更多相关文章
- 【分布式】Zookeeper使用--Java API
一.前言 上一篇博客我们通过命令行来操作Zookeper的客户端和服务端并进行相应的操作,这篇主要介绍如何通过API(JAVA)来操作Zookeeper. 二.开发环境配置 首先打开Zookeeper ...
- 9. 使用ZooKeeper Java API编程
ZooKeeper是用Java开发的,3.4.6版本的Java API文档可以在http://zookeeper.apache.org/doc/r3.4.6/api/index.html上找到. Ti ...
- Zookeeper学习笔记——2 Shell和Java API的使用
ZooKeeper的使用一般都接触不到,因为平时工作甚少直接使用ZK.但是通过手动操作一下ZK,还是能对其中的门道了解各一二. shell 常用命令 help 查看所有支持的命令 [zk: local ...
- Linux -- 基于zookeeper的java api(二)
Linux -- 基于zookeeper的java api(二) 写一个关于基于集群的zookeeper的自定义实现HA 基于客户端和监控器:使用监控的方法查看每个注册过的节点的状态来做出操作. Wa ...
- Linux -- 基于zookeeper的java api(一)
Linux -- 基于zookeeper的java api 首先启动你所有的 zkService.sh 查看状态:检查是否启动正确 [root@hu-hadoop2 ~]# zkServer.sh s ...
- ZooKeeper(二)Java API使用
ZooKeeper官网提供了Java和C的API. 本文使用Java API来实现ZooKeeper的基本操作. 前言 下图中的Replicated Database是包含完整数据树(entire d ...
- Zookeeper java api
Zookeeper java api 主要有以下几个: 方法名称 描述 String create(final String path, byte data[], List acl, CreateM ...
- zookeeper Java API 简单操作示例
本文主要介绍如何在java IDE中如何应用使用客户端与zookeeper服务器通信. 首先搭建maven环境,并在pom文件中加入zookeeper引用包: <!-- https://mvnr ...
- Java API操作ZooKeeper
创建会话 package org.zln.zk; import org.apache.zookeeper.WatchedEvent; import org.apache.zookeeper.Watch ...
- 14.ZooKeeper Java API 使用样例
转自:http://www.aboutyun.com/thread-7332-1-1.html package com.taobao.taokeeper.research.sample; import ...
随机推荐
- 阿里云混合云Apsara Stack 2.0发布 加速政企数智创新
简介: 2021年10月21日,杭州 – 今日,阿里云于云栖大会正式发布Apsara Stack 2.0,从面向单一私有云场景,升级为服务大型集团云&行业云场景.新一代Apsara Stac ...
- [公链观点] BTC 1.0, ETH 2.0, EOS 3.0, Dapp, WASM, DOT, ADA, VNT
Dapp 发展史 WASM 兼容Web的编码方式 Cardano(ADA 艾达币) 权益挖矿 VNT chain 解决联盟链和公链的跨链基础项目 跨链项目 Polkadot (DOT 波卡币) 是不是 ...
- HttpClient配置SSL绕过https证书以及双向认证
HttpClient简介 1.HTTP 协议是 Internet 上使用得最多.最重要的协议之一,越来越多的 Java 应用程序需要直接通过 HTTP 协议来访问网络资源.虽然在 JDK 的 java ...
- vue使用websoket(非封装)
上代码: create:function(){ this.initWebpack() } methods:{ initWebpack(){//初始化websocket let us ...
- 使用 Docker 部署 moments 微信朋友圈
1)项目介绍 GitHub:https://github.com/kingwrcy/moments 今天给大家分享一个 类似微信朋友圈 的项目 moments,适合用于记录生活. 2)项目特色 支持匿 ...
- 应急响应--windows入侵排查
- AIRIOT物联网低代码平台如何配置OPC UA驱动?
AIRIOT物联网低代码平台支持驱动类型丰富,驱动包括但不限于通用驱动信息,无线驱动信息,行业驱动信息及各个厂商驱动.驱动稳定性强,经受住各个大型项目考验,持续稳定运行. AIRIOT物联网低代码平台 ...
- hadoop部署2
完全分布式部署介绍 学习目标 完全分部式是真正利用多台Linux主机来进行部署Hadoop,对Linux机器集群进行规划,使得Hadoop各个模块分别 部署在不同的多台机器上. 能够了解完全分布式部署 ...
- CeiT:商汤提出结合CNN优势的高效ViT模型 | 2021 arxiv
论文提出CeiT混合网络,结合了CNN在提取低维特征方面的局部性优势以及Transformer在建立长距离依赖关系方面的优势.CeiT在ImageNet和各种下游任务中达到了SOTA,收敛速度更快,而 ...
- 【题解】A18536.星光交错的律动
题目跳转 思路:这道题可能跟博弈论有一点关系,没有学习过博弈论做起来应该问题也不大.思考一个问题,先手必胜的前提是什么? 有关更多的内容可以前往:浅谈有向无环图 先手必胜的前提是,在任何一种局面下,先 ...