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. 深度解析PolarDB数据库并行查询技术

    简介: 随着数据规模的不断扩大,用户SQL的执行时间越来越长,这不仅对数据库的优化能力提出更高的要求,并且对数据库的执行模式也提出了新的挑战.本文将介绍基于代价进行并行优化.并行执行的云数据库的并行查 ...

  2. 解决 Serverless 落地困难的关键,是给开发者足够的“安全感”

    ​简介:越来越多的云产品都会向全托管.Serverless 形态演进.当云的产品体系 Serverless 化达到一个临界值,通过函数计算这样的 Serverless 计算服务结合其他 Serverl ...

  3. [ML] 深度学习的数学基础: 函数/参数优化/矩阵运算/向量化/卷积运算/张量运算

      1. 函数与导数 函数是一种映射关系,将一个或多个自变量的取值映射为一个因变量的取值. 函数的导数表示函数在某一点处的变化率,即函数图像在该点的切线斜率. 导数可以用来求解函数的最值.优化问题.拟 ...

  4. dotnet SemanticKernel 入门 开篇

    本文将开坑告诉大家什么是 SemanticKernel 以及如何使用框架 众所周知 GPT 是一个大语言模型,能够参与的输入和输出是文本内容.而想要让 GPT 完成各项功能,则需要对接现有的编程世界. ...

  5. dotnet 6 已知问题 获取 CultureInfo.NumberFormat 可能抛出 IndexOutOfRangeException 异常

    本文记录一个 dotnet 6 已知问题,准确来说这是一个在 dotnet 5 引入的问题,到 dotnet 6.0.12 还没修.在获取 CultureInfo.NumberFormat 属性时,在 ...

  6. ansible系列(34)--ansible实战之部署WEB集群架构(4)

    目录 1. 业务环境部署 1.1 wordpress-base编写 1.2 wordpress-web编写 1.3 wordpress-mysql编写 1.4 wordpress-proxy编写 1. ...

  7. Vben-admin---ApiSelect Invalid prop: type check failed for prop "onUpdate:value". Expected Function, got Array

    在basicFrom组件里添加一个ApiSelect, <template #localSearch="{ model, field }"> <ApiSelect ...

  8. Chrome 插件 V3 版本 Manifest.json 中的内容脚本(Content Scripts)解析

    内容脚本(Content Scripts) 指定在用户打开某些网页时要使用的 JavaScript 或 CSS 文件. 内容脚本是在网页环境中运行的文件.通过使用标准文档对象模型 (DOM),开发者能 ...

  9. C语言:冒泡排序---详细解释

    //冒泡排序数字,仅仅适用于数组无序的时候,若有序则不能使用冒号排序     例如: 数字组:5,54,64,98,47     /*     1: 54,64,98,47,5     4次     ...

  10. Java面试题:Spring中的循环依赖,给程序员带来的心理阴影

    循环依赖通常发生在两个或多个Spring Bean之间,它们通过构造器.字段(使用@Autowired)或setter方法相互依赖,从而形成一个闭环.下面是一个使用字段注入(即使用@Autowired ...