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的更多相关文章

  1. 【分布式】Zookeeper使用--Java API

    一.前言 上一篇博客我们通过命令行来操作Zookeper的客户端和服务端并进行相应的操作,这篇主要介绍如何通过API(JAVA)来操作Zookeeper. 二.开发环境配置 首先打开Zookeeper ...

  2. 9. 使用ZooKeeper Java API编程

    ZooKeeper是用Java开发的,3.4.6版本的Java API文档可以在http://zookeeper.apache.org/doc/r3.4.6/api/index.html上找到. Ti ...

  3. Zookeeper学习笔记——2 Shell和Java API的使用

    ZooKeeper的使用一般都接触不到,因为平时工作甚少直接使用ZK.但是通过手动操作一下ZK,还是能对其中的门道了解各一二. shell 常用命令 help 查看所有支持的命令 [zk: local ...

  4. Linux -- 基于zookeeper的java api(二)

    Linux -- 基于zookeeper的java api(二) 写一个关于基于集群的zookeeper的自定义实现HA 基于客户端和监控器:使用监控的方法查看每个注册过的节点的状态来做出操作. Wa ...

  5. Linux -- 基于zookeeper的java api(一)

    Linux -- 基于zookeeper的java api 首先启动你所有的 zkService.sh 查看状态:检查是否启动正确 [root@hu-hadoop2 ~]# zkServer.sh s ...

  6. ZooKeeper(二)Java API使用

    ZooKeeper官网提供了Java和C的API. 本文使用Java API来实现ZooKeeper的基本操作. 前言 下图中的Replicated Database是包含完整数据树(entire d ...

  7. Zookeeper java api

     Zookeeper java api 主要有以下几个: 方法名称 描述 String create(final String path, byte data[], List acl, CreateM ...

  8. zookeeper Java API 简单操作示例

    本文主要介绍如何在java IDE中如何应用使用客户端与zookeeper服务器通信. 首先搭建maven环境,并在pom文件中加入zookeeper引用包: <!-- https://mvnr ...

  9. Java API操作ZooKeeper

    创建会话 package org.zln.zk; import org.apache.zookeeper.WatchedEvent; import org.apache.zookeeper.Watch ...

  10. 14.ZooKeeper Java API 使用样例

    转自:http://www.aboutyun.com/thread-7332-1-1.html package com.taobao.taokeeper.research.sample; import ...

随机推荐

  1. 阿里云混合云Apsara Stack 2.0发布 加速政企数智创新

    ​简介: 2021年10月21日,杭州 – 今日,阿里云于云栖大会正式发布Apsara Stack 2.0,从面向单一私有云场景,升级为服务大型集团云&行业云场景.新一代Apsara Stac ...

  2. [公链观点] BTC 1.0, ETH 2.0, EOS 3.0, Dapp, WASM, DOT, ADA, VNT

    Dapp 发展史 WASM 兼容Web的编码方式 Cardano(ADA 艾达币) 权益挖矿 VNT chain 解决联盟链和公链的跨链基础项目 跨链项目 Polkadot (DOT 波卡币) 是不是 ...

  3. HttpClient配置SSL绕过https证书以及双向认证

    HttpClient简介 1.HTTP 协议是 Internet 上使用得最多.最重要的协议之一,越来越多的 Java 应用程序需要直接通过 HTTP 协议来访问网络资源.虽然在 JDK 的 java ...

  4. vue使用websoket(非封装)

    上代码: create:function(){ this.initWebpack() } methods:{ initWebpack(){//初始化websocket           let us ...

  5. 使用 Docker 部署 moments 微信朋友圈

    1)项目介绍 GitHub:https://github.com/kingwrcy/moments 今天给大家分享一个 类似微信朋友圈 的项目 moments,适合用于记录生活. 2)项目特色 支持匿 ...

  6. 应急响应--windows入侵排查

  7. AIRIOT物联网低代码平台如何配置OPC UA驱动?

    AIRIOT物联网低代码平台支持驱动类型丰富,驱动包括但不限于通用驱动信息,无线驱动信息,行业驱动信息及各个厂商驱动.驱动稳定性强,经受住各个大型项目考验,持续稳定运行. AIRIOT物联网低代码平台 ...

  8. hadoop部署2

    完全分布式部署介绍 学习目标 完全分部式是真正利用多台Linux主机来进行部署Hadoop,对Linux机器集群进行规划,使得Hadoop各个模块分别 部署在不同的多台机器上. 能够了解完全分布式部署 ...

  9. CeiT:商汤提出结合CNN优势的高效ViT模型 | 2021 arxiv

    论文提出CeiT混合网络,结合了CNN在提取低维特征方面的局部性优势以及Transformer在建立长距离依赖关系方面的优势.CeiT在ImageNet和各种下游任务中达到了SOTA,收敛速度更快,而 ...

  10. 【题解】A18536.星光交错的律动

    题目跳转 思路:这道题可能跟博弈论有一点关系,没有学习过博弈论做起来应该问题也不大.思考一个问题,先手必胜的前提是什么? 有关更多的内容可以前往:浅谈有向无环图 先手必胜的前提是,在任何一种局面下,先 ...