Zookeeper(3)---java客户端的使用
前面介绍了zk指令的使用,这里说一下java客户端中怎么使用这些指令
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.5.5</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
客户端创建参数:
1.初始化连接:org.apache.zookeeper.ZooKeeper,实例化该类之后将会自动与ZK建立连接。构造参数说明如下:
|
参数名称 |
类型 |
说明 |
|
connectString |
String |
连接串,包括ip+端口 ,集群模式下用逗号隔开 192.168.0.101:2181,192.168.0.67:2181 |
|
sessionTimeout |
int |
会话超时时间,该值不能超过服务端所设置的 minSessionTimeout 和maxSessionTimeout |
|
watcher |
Watcher |
会话监听器,服务端事件将会触该监听 |
|
sessionId |
long |
自定义会话ID |
|
sessionPasswd |
byte[] |
会话密码 |
|
canBeReadOnly |
boolean |
该连接是否为只读的 |
|
hostProvider |
HostProvider |
服务端地址提供者,指示客户端如何选择某个服务来调用,默认采用StaticHostProvider实现 |
2. org.apache.zookeeper.ZooKeeper#create() 创建节点 创建节点的时候需要注意设置ACL权限,五个权限位:
int READ = 1 << 0;
int WRITE = 1 << 1;
int CREATE = 1 << 2;
int DELETE = 1 << 3;
int ADMIN = 1 << 4;
int ALL = READ | WRITE | CREATE | DELETE | ADMIN;
3.org.apache.zookeeper.ZooKeeper#getData() 查看节点数据/添加数据变化监听
4.org.apache.zookeeper.ZooKeeper#getChildren() 查看子节点/添加子节点变化监听
代码demo:
package com.nijunyang.zookeeper.demo; import org.apache.zookeeper.*;
import org.apache.zookeeper.data.ACL;
import org.apache.zookeeper.data.Id;
import org.apache.zookeeper.data.Stat;
import org.junit.Before;
import org.junit.Test; import java.io.IOException;
import java.util.ArrayList;
import java.util.List; /**
* Description:
* Created by nijunyang on 2020/10/27 21:36
*/
public class ZkClientDataChange { ZooKeeper zkClient; @Before
public void before() throws IOException {
//集群用,分割
String connectString = "192.168.0.67:2181";
zkClient = new ZooKeeper(connectString, 40000, new Watcher() {
@Override
public void process(WatchedEvent event) {
System.out.println(event.getPath());
System.out.println(event);
}
});
} //获取数据
@Test
public void getData1() throws KeeperException, InterruptedException {
byte[] data = zkClient.getData("/njy", false, null);
System.out.println(new String(data));
} //添加监听
@Test
public void getData2() throws KeeperException, InterruptedException {
//直接调用初始化的监听
byte[] data = zkClient.getData("/njy", true, null);
System.out.println(new String(data));
Thread.sleep(Integer.MAX_VALUE);
} @Test
public void getData3() throws KeeperException, InterruptedException {
//Stat 会填充带回来
Stat stat = new Stat();
//添加自定义监听
byte[] data = zkClient.getData("/njy", new Watcher() {
@Override
public void process(WatchedEvent event) {
try {
//重复添加监听
zkClient.getData(event.getPath(), this, null);
} catch (Exception e) {
e.printStackTrace();
}
System.out.println(event.getPath());
}
}, stat);
System.out.println(stat);
Thread.sleep(Long.MAX_VALUE);
} //带回调
@Test
public void getData4() throws KeeperException, InterruptedException {
zkClient.getData("/njy", false, new AsyncCallback.DataCallback() {
@Override
public void processResult(int rc, java.lang.String path, Object ctx, byte[] data, Stat stat) {
System.out.println(new String(data));
System.out.println(stat);
}
}, "");
Thread.sleep(Long.MAX_VALUE);
} //获取子节点
@Test
public void getChild() throws KeeperException, InterruptedException {
List<String> children = zkClient.getChildren("/njy", false);
children.stream().forEach(System.out::println);
} //监听子节点变化
@Test
public void getChild2() throws KeeperException, InterruptedException {
List<String> children = zkClient.getChildren("/njy", event -> {
System.out.println(event.getPath());
try {
zkClient.getChildren(event.getPath(), false);
} catch (KeeperException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
});
children.stream().forEach(System.out::println);
Thread.sleep(Long.MAX_VALUE);
} //持续监听
@Test
public void getChild3() throws KeeperException, InterruptedException {
Stat stat = new Stat();
List<String> children = zkClient.getChildren("/njy", new Watcher() {
@Override
public void process(WatchedEvent event) {
System.out.println(event.getPath());
try {
zkClient.getChildren(event.getPath(),this);
} catch (KeeperException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}, stat);
children.stream().forEach(System.out::println);
Thread.sleep(Long.MAX_VALUE);
} //创建节点
@Test
public void createNode() throws KeeperException, InterruptedException {
List<ACL> list = new ArrayList<>();
// int perm = ZooDefs.Perms.ADMIN | ZooDefs.Perms.READ;//cdwra
// int READ = 1 << 0;
// int WRITE = 1 << 1;
// int CREATE = 1 << 2;
// int DELETE = 1 << 3;
// int ADMIN = 1 << 4;
// int ALL = READ | WRITE | CREATE | DELETE | ADMIN;
int perm = ZooDefs.Perms.ALL;
//ACL权限
ACL acl = new ACL(perm, new Id("world", "anyone"));
// ACL acl2 = new ACL(perm, new Id("ip", "192.168.0.67"));
// ACL acl3 = new ACL(perm, new Id("ip", "192.168.0.101"));
list.add(acl);
// list.add(acl2);
// list.add(acl3);
zkClient.create("/njy/njyn1", "hello".getBytes(), list, CreateMode.PERSISTENT);
}
}
Zookeeper(3)---java客户端的使用的更多相关文章
- Zookeeper的java客户端API使用方法(五)
前面几篇博文,我们简单的介绍了一下zookeeper,如何安装zookeeper集群,以及如何使用命令行等.这篇博文我们重点来看下Zookeeper的java客户端API使用方式. 创建会话 客户端可 ...
- ZooKeeper学习总结(2)——ZooKeeper开源Java客户端ZkClient使用
zkclient是zookeeper的Java客户端.它让Zookeeper API 使用起来更简单:它非常方便订阅各种事件并自动重新绑定事件(会话建立.节点修改.节点删除.子节点变更等):它提供了s ...
- zookeeper的Java客户端API
zookeeper作为一个分布式服务框架,主要用来解决分布式数据一致性问题,对多种语言提供了API.这里主要记录下JAVA客户端API的使用. 1.创建会话 客户端可以通过创建一个ZooKeeper实 ...
- 02.ZooKeeper的Java客户端使用
1.ZooKeeper常用客户端比较 1.ZooKeeper常用客户端 zookeeper的常用客户端有3种,分别是:zookeeper原生的.Apache Curator.开源的zkclie ...
- Zookeeper 的 java 客户端都有哪些?
java 客户端:zk 自带的 zkclient 及 Apache 开源的 Curator.
- [转载] ZooKeeper的Java客户端API
转载自 http://www.cnblogs.com/ggjucheng/p/3370359.html http://zookeeper.apache.org/doc/trunk/javaExampl ...
- 六:ZooKeeper的java客户端api的使用
一:客户端链接测试 package com.yeepay.sxf.createConnection; import java.io.IOException; import org.apache.zoo ...
- ZooKeeper:Java客户端网络处理
了解ZooKeeper客户端的实现,对于使用ZooKeeper的客户端非常重要. 通过对客户端源码的阅读,了解了如下信息: 创建ZooKeeper对象时,应会创建一个ClientCnxn(代表了客户端 ...
- 12. ZooKeeper之Java客户端API使用—创建会话。
转自:https://blog.csdn.net/en_joker/article/details/78686649 客户端可以通过创建一个ZooKeeper(org.apache.zookeeper ...
- 13.Zookeeper的java客户端API使用方法
转自:https://blog.csdn.net/jiuqiyuliang/article/details/56012027
随机推荐
- java String字符串总结
这里我们将总结字符串相关的知识,除了总结String的API用法,同时我们还会总结一些相关的知识点,包括字符串常量池.StringBuffer.StringBuilder,以及equals和==的用法 ...
- Android 图表开源库调研及使用示例
原文地址: Android图表开源库调研及使用示例 - Stars-One的杂货小窝 之前做的几个项目都是需要实现图表统计展示,于是做之前调研了下,做下记录 概述 AAChartCore-Kotlin ...
- 2023年奔走的总结---吉特日化MES 项目趣事 篇一
终于又到了2023年的年末了,既有兴奋也有遗憾,兴奋的是这难熬的一年马上就要过去了,遗憾的是今年好像没有做成太多的事情.差不多180次的大交通记录,也再次刷新了奔走的记录,忙忙碌碌兜兜转转又去了不少地 ...
- django数据库事务操作celery任务注意事项
from django.db import transaction from django.http import HttpResponseRedirect @transaction.atomic d ...
- MinIO入门
MinIO 是一种高性能.S3 兼容的对象存储. 官方资料 中国官网 代码仓库 安装和部署MinIO 单节点单硬盘部署MinIO 单节点多硬盘部署MinIO 多节点多硬盘部署 站点复制概述 管理现有的 ...
- ElasticSearch之Get index settings API
获取指定索引的参数的值. 获取指定索引的全部参数,命令样例如下: curl -X GET "https://localhost:9200/testindex_002/_settings?pr ...
- ElasticSearch之配置
ElasticSearch主要的配置文件,如下: elasticsearch.yml,ElasticSearch的相关参数. jvm.options,JVM的相关参数. log4j2.properti ...
- export详解
linux下export命令详解 export:将自定义变量设定为系统环境变量(当前shell中有效) 功能说明:设置或显示环境变量. 语 法:export [-fnp][变量名称]=[变量设置值] ...
- springmvc内嵌tomcat、tomcat整合springmvc、自研国产web中间件
springmvc内嵌tomcat.tomcat整合springmvc.自研国产web中间件 这是由于公司老项目转化springboot存在太多坑,特别是hibernate事务一条就坑到跑路,你又不想 ...
- vue点击图片获取图片原像素坐标
<template> <div> <img ref="image" width="1500px" :src="image ...