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. Apache Flink 在京东的实践与优化

    ​简介: Flink 助力京东实时计算平台朝着批流一体的方向演进. 本文整理自京东高级技术专家付海涛在 Flink Forward Asia 2020 分享的议题<Apache Flink 在京 ...

  2. Python采集知网

    Python爬虫初探 selenium+beautifulsoup4+chromedriver 安装模块:* import pymssql* pip install bs4* pip install ...

  3. OLAP系列之分析型数据库clickhouse主从副本模式(三)

    一.测试单分片,单副本或多副本模式 # 1.停止集群 systemctl stop clickhouse-server # 修改配置文件 vim /etc/clickhouse-server/conf ...

  4. RT-Thread内存管理

    一.内存管理的特点 分配内存的时间必须是确定的.一般内存管理算法是根据需要存储的数据的长度在内存中去寻找一个与这段数据相适应的空闲内存块,然后将数据存储在里面.而寻找这样一个空闲内存块所耗费的时间是不 ...

  5. 基于FPGA的音乐蜂鸣器设计

    蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电,广泛应用于计算机.打印机.复印机.报警器.电子玩具.汽车电子设备.电话机.定时器等电子产品中作发声器件. 图1 :蜂鸣器实物图 蜂鸣器主要分为压电 ...

  6. VMware Workstation Pro各版本下载链接汇总(特全!!!)

    VMware Workstation Pro各版本下载链接汇总 (10.11.12.14.15.16官网全版本) 整理不易,点赞关注一下吧 工具软件:VMware Workstation Pro 1. ...

  7. Pytorch param.grad.data. 出现 AttributeError: ‘NoneType‘ object has no attribute ‘data‘

    程序中有需要优化的参数未参与前向传播.

  8. docker-compose 安装LNMP

    安装DNMP https://github.com/yeszao/dnmp.git https://blog.csdn.net/weixin_34038293/article/details/9427 ...

  9. docker 搭建LNMP环境

    php7 仓库地址 https://gitee.com/haima1004/docker-lnmp

  10. 详解GaussDB(DWS)中的行执行引擎

    本文分享自华为云社区<GaussDB(DWS)行执行引擎详解>,作者:yd_227398895. 1.前言 GaussDB(DWS)包含三大引擎,一是SQL执行引擎,用来解析用户输入的SQ ...