Zookeeper客户端使用(使用zkclient)
Zookeeper客户端使用
二、使用zkclient
在pom.xml中加入依赖
<dependency>
<groupId>com.101tec</groupId>
<artifactId>zkclient</artifactId>
<version>0.2</version>
</dependency>
直接上代码:
/**
* Project Name:mk-project <br>
* Package Name:com.suns.zookeeper.zkclient <br>
*
* @author mk <br>
* Date:2018-10-31 11:05 <br>
*/ package com.suns.zookeeper.zkclient; import org.I0Itec.zkclient.IZkChildListener;
import org.I0Itec.zkclient.IZkDataListener;
import org.I0Itec.zkclient.ZkClient;
import org.apache.zookeeper.CreateMode;
import org.apache.zookeeper.data.Stat; import java.util.List; /**
* zkclient客户端使用
* 和原生zookeeper优点:
* 1.使用api更方便
* 2.订阅节点数据改变或者子节点变化,只需要订阅一次,便可以一直使用。而原生zookeeper的监听是一次性的,需要重复注册。
* ClassName: ZkClientTest <br>
* Description: <br>
* @author mk
* @Date 2018-10-31 11:05 <br>
* @version
*/
public class ZkClientTest { public static final String connect = "127.0.0.1:2181";
private static ZkClient zkClient = null;
private static String nodePath = "/zkclient1";
private static String nodeChildPath = "/zkclient1/n1/n11/n111/n1111"; public static void main(String[] args) throws Exception { //初始化
init(connect,5000); //订阅节点数据改变或者子节点变化,只需要订阅一次,便可以一直使用。而原生zookeeper的监听是一次性的,需要重复注册。
subscribe(); //新增
create(nodePath,"n1");
//递归新增
createRecursion(nodeChildPath,"n1"); //查询
query(nodePath); //修改
update(nodePath,"n11"); //单个节点删除
// delete(nodePath);
//递归删除
deleteRecursion(nodePath); } private static void deleteRecursion(String path) {
boolean result = zkClient.deleteRecursive(path);
System.out.println("delete:"+"["+path+"],result:"+result);
} private static void delete(String path) {
boolean result = zkClient.delete(path);
System.out.println("delete:"+"["+path+"],result:"+result);
} private static void update(String path, String data) {
Stat stat = zkClient.writeData(path, data);
System.out.println("setData:"+"["+path+"],stat:"+stat);
} private static void query(String path) {
Object o = zkClient.readData(path);
System.out.println("query:"+"["+path+"],result:"+o);
} private static void createRecursion(String path,String data) {
zkClient.createPersistent(path,true);
System.out.println("create:"+"["+path+"-->"+data);
} private static void create(String path, String data) {
boolean exists = zkClient.exists(path);
if(exists){
System.out.println("节点["+path+"]已存在,不能新增");
return;
}
String result = zkClient.create(path, data, CreateMode.PERSISTENT);
System.out.println("create:"+"["+path+"-->"+data+"],result:"+result);
} private static void subscribe() {
//订阅节点内容改变
zkClient.subscribeDataChanges(nodePath, new IZkDataListener() {
@Override
public void handleDataChange(String path, Object data) throws Exception {
System.out.println("handleDataChange----->"+path+"|"+data);
} @Override
public void handleDataDeleted(String path) throws Exception {
System.out.println("handleDataDeleted----->"+path);
}
}); //订阅子节点改变
zkClient.subscribeChildChanges(nodePath, new IZkChildListener() {
@Override
public void handleChildChange(String parentPath, List<String> list) throws Exception {
System.out.println("handleChildChange----->"+parentPath+"|"+list);
}
}); } private static void init(String connect, int sessionTimeout) {
zkClient = new ZkClient(connect, sessionTimeout);
}
}
运行结果:
Zookeeper客户端使用(使用zkclient)的更多相关文章
- zookeeper客户端使用第三方(zkclient)封装的Api操作节点
1.引入依赖 <dependency> <groupId>com.101tec</groupId> <artifactId>zkclient</a ...
- ZooKeeper客户端原生API的使用以及ZkClient第三方API的使用
这两部分内容的介绍主要讲的是节点及节点内容和子节点的操作,并且讲解的节点的事件监听以及ACL授权 ZooKeeper客户端原生API的使用 百度网盘地址: http://pan.baidu.com/s ...
- Zookeeper客户端对比选择_4
Zookeeper客户端对比选择 本文思维导图 使用框架的好处是自带一套实用的API,但是Zookeeper虽然非常强大,但是社区却安静的可怕,版本更新较慢,下面会先从zookeeper原生API的不 ...
- 【分布式】Zookeeper客户端
一.前言 前篇博客分析了Zookeeper的序列化和通信协议,接着继续学习客户端,客户端是开发人员使用Zookeeper最主要的途径,很有必要弄懂客户端是如何与服务端通信的. 二.客户端 2.1 客户 ...
- zookeeper 客户端编程
zookeeper是一个分布式的开源的分布式协调服务,用它可以来现同步服务,配置维护.zookeeper的稳定性也是可以保证的,笔者曾参与过的使用zookeeper的两个应用,一个是用zookeepe ...
- ZooKeeper客户端事件串行化处理
为了提升系统的性能,进一步提高系统的吞吐能力,最近公司很多系统都在进行异步化改造.在异步化改造的过程中,肯定会比以前碰到更多的多线程问题,上周就碰到ZooKeeper客户端异步化过程中的一个死锁问题, ...
- zookeeper客户端操作
ZooKeeper客户端 zkCli.sh 节点的增删改查 在 bin 目录下的 zkCli.sh 就是ZooKeeper客户端 ./zkCli.sh -timeout 5000 -server ...
- zookeeper客户端 zkCli使用及常用命令
上篇(http://www.cnblogs.com/yangzhenlong/p/8270835.html)zk伪集群搭建好后,使用zkCli连接zk服务 切换到zk1/bin 目录,执行zkCli. ...
- Zookeeper客户端Curator基本API
在使用zookeper的时候一般不使用原生的API,Curator,解决了很多Zookeeper客户端非常底层的细节开发工作,包括连接重连.反复注册Watcher和NodeExistsExceptio ...
随机推荐
- prism App.config 配置
<?xml version="1.0" encoding="utf-8" ?> <configuration> <configSe ...
- 阶段3 3.SpringMVC·_01.SpringMVC概述及入门案例_01.SpringMVC概述及入门案例
第二章 第三章 第四章 三层框架 springMvc是表现层
- 【DVWA】SQL Injection(SQL 注入)通关教程
日期:2019-07-28 20:43:48 更新: 作者:Bay0net 介绍: 0x00.基本信息 关于 mysql 相关的注入,传送门. SQL 注入漏洞之 mysql - Bay0net - ...
- Elasticsearch 为何要在 7.X版本中 去除type 的概念
背景说明 Elasticsearch是一个基于Apache Lucene(TM)的开源搜索引擎.无论在开源还是专有领域,Lucene可以被认为是迄今为止最先进.性能最好的.功能最全的搜索引擎库. El ...
- abap seach help 搜索帮助
ABAP 的搜索帮助有很多种方法,掌握下面的几种基本差不多了 *&--------------------------------------------------------------- ...
- 深入浅出JavaScript(中文版)__莫里森 初读笔记
创建变量,使用关键字var; 创建常量,使用关键字const; 大驼峰用于对象,小驼峰用于变量和函数. 在试图相加数字时意外做了字符串相连,是种常见的JavaScript错误.如果想做数字相加,请确定 ...
- java:LeakFilling(Springmvc)
1.后台可以同时多个对象接收前端页面的值:(如图两个都打印了) 2.参数绑定的注解,通过该注解可以解决参数名称与controller中形参名称不一致的问题: @RequestParam(name=&q ...
- centos中切换图形与命令行界面
1.在命令行的centos中安装图形化 配置本地源 [root@localhost yum.repos.d]# yum clean all [root@localhost yum.repos.d]# ...
- 解一元二次方程的C++实现
一元二次方程的根的情况分为实根与虚根两种,代码如下 #include<iostream> #include<cmath> using namespace std; float ...
- The system has no LUN copy license
[问题描述] ipsan作为cinder后端的时候,通过快照创建磁盘失败,报以下错误: { u 'data': {}, u 'error': { u 'code': 1077950181, u 'de ...