Ⅴ:zookeeper的相关Java Api
2021最新zookeeper系列
❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️
Ⅰ:zookeeper的单机安装 - 详细教程:https://blog.csdn.net/Kevinnsm/article/details/116134397?spm=1001.2014.3001.5501
Ⅱ:zookeeper的相关shell命令:https://blog.csdn.net/Kevinnsm/article/details/116137602?spm=1001.2014.3001.5501
Ⅲ:zookeeper之查看节点的状态信息:https://blog.csdn.net/Kevinnsm/article/details/116143218?spm=1001.2014.3001.5501
Ⅳ:zookeeper的acl权限控制:https://blog.csdn.net/Kevinnsm/article/details/116167394?spm=1001.2014.3001.5501
Ⅴ:zookeeper的相关Java Api:https://blog.csdn.net/Kevinnsm/article/details/116462557?spm=1001.2014.3001.5501
Ⅵ:zookeeper的Watcher事件监听机制:https://blog.csdn.net/Kevinnsm/article/details/116501842?spm=1001.2014.3001.5501
Ⅶ:教你一招利用zookeeper作为服务的配置中心:https://blog.csdn.net/Kevinnsm/article/details/116542974?spm=1001.2014.3001.5501
❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️
文章目录
- 前置准备
- 一、API之创建节点
- 1、API之word授权模式
- 2、API之IP授权模式
- 3、API之auth授权模式
- 4、API之digest授权模式
- 二、API之修改节点
- 1、同步更新
- 2、异步更新
- 三、API之删除节点
- 1、同步删除
- 2、异步删除
- 四、API之查看节点
- 1、同步查看
- 1、异步查看
- 五、API之查看所有子节点
- 1、同步查看
- 2、异步查看
- 六、API之查看节点是否存在
- 1、同步查看
- 2、异步查看
# 前置:--》把握住Watcher流程《--
1、连接zookeeper服务器
2、连接时必须使当前线程等待(等待其他线程创建连接zookeeper服务成功,使用计数器实现)
3、执行回调函数process
4、释放当前线程
前置准备
如果不知道zookeeper怎么安装,请移步zookeeper的安装步骤:https://blog.csdn.net/Kevinnsm/article/details/116134397?spm=1001.2014.3001.5501
一、API之创建节点
使用@Before和@After注解
该注解的作用是:当在有@Test注解的条件下,首先会执行@Before标注的方法,然后执行@Test注解标注的方法,最后执行@After标注的方法.
由于每次都要进行zookeeper服务的连接和关闭,所以使用@Before和@After注解进行有顺序的连接和关闭。
package com.zookeeper;import com.sun.xml.internal.bind.v2.model.core.ID;
import org.apache.zookeeper.*;
import org.apache.zookeeper.data.ACL;
import org.apache.zookeeper.data.Id;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.CountDownLatch;/*** @author:抱着鱼睡觉的喵喵* @date:2021/4/28* @description:*/
public class CreateNode {private String IP = "123.57.252.59:2181";private ZooKeeper zookeeper;@Beforepublic void connection() throws IOException, InterruptedException {//CountDownLatch :使一个线程等待其他线程各自执行完毕后再执行final CountDownLatch downLatch = new CountDownLatch(1);//Watcher是一个回调函数zookeeper = new ZooKeeper("123.57.252.59:2181", 10000, new Watcher() {public void process(WatchedEvent watchedEvent) {if (watchedEvent.getState() == Event.KeeperState.SyncConnected) {System.out.println("连接成功!");downLatch.countDown();}}});downLatch.await();}//关闭zookeeper连接@Afterpublic void close() {try {zookeeper.close();} catch (InterruptedException e) {e.printStackTrace();}}
}
1、API之word授权模式
/*** world授权模式* @throws KeeperException* @throws InterruptedException*/@Testpublic void create3() throws KeeperException, InterruptedException {//权限列表List<ACL> acls = new ArrayList<ACL>();//授权模式和授权对象Id id = new Id("world", "anyone");//授权设置 (读和创建的权限)acls.add(new ACL(ZooDefs.Perms.READ, id));acls.add(new ACL(ZooDefs.Perms.CREATE, id));//PERSISTENT:持久化节点zookeeper.create("/unity/node/3", "node3".getBytes(), acls, CreateMode.PERSISTENT);}
2、API之IP授权模式
/*** ip授权模式* @throws KeeperException* @throws InterruptedException*/@Testpublic void create4() throws KeeperException, InterruptedException {List<ACL> acls = new ArrayList<ACL>();Id id = new Id("ip", "8.140.37.103");acls.add(new ACL(ZooDefs.Perms.READ, id));zookeeper.create("/unity/nod4", "node4".getBytes(), acls, CreateMode.PERSISTENT);}
3、API之auth授权模式
one:
/*** auth授权模式* @throws KeeperException* @throws InterruptedException*/@Testpublic void create5() throws KeeperException, InterruptedException {zookeeper.addAuthInfo("digest", "user:user".getBytes());zookeeper.create("/unity/node5", "node5".getBytes(), ZooDefs.Ids.CREATOR_ALL_ACL, CreateMode.PERSISTENT);}
two:
/*** auth授权模式* @throws KeeperException* @throws InterruptedException*/@Testpublic void create6() throws KeeperException, InterruptedException {zookeeper.addAuthInfo("digest", "user:user".getBytes());List<ACL> acls = new ArrayList<ACL>();Id id = new Id("auth", "user");acls.add(new ACL(ZooDefs.Perms.ALL, id));zookeeper.create("/unity/node6", "node6".getBytes(), acls, CreateMode.PERSISTENT);}
4、API之digest授权模式
/*** digest授权模式* @throws KeeperException* @throws InterruptedException*/@Testpublic void create7() throws KeeperException, InterruptedException {//权限列表List<ACL> acls = new ArrayList<ACL>();//授权模式和授权对象Id id = new Id("digest", "GR9f4mKrV2reacyCyiukMpZl5qc=");//授权设置acls.add(new ACL(ZooDefs.Perms.ALL, id));zookeeper.create("/node7","node7".getBytes(), acls, CreateMode.PERSISTENT);}
二、API之修改节点
setData(String path, bytes[] data, int dataVersion)
setData(String path, bytes[] data, int dataVersion, AsyncCallback.StatCallback)
连接和关闭
package com.zookeeper;import org.apache.zookeeper.*;
import org.apache.zookeeper.data.Stat;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;import java.io.IOException;
import java.util.concurrent.CountDownLatch;/*** @author:抱着鱼睡觉的喵喵* @date:2021/4/28* @description:*/
public class UpdateNode {private String IP = "123.57.252.59:2181";private ZooKeeper zookeeper;@Beforepublic void connection() throws IOException, InterruptedException {final CountDownLatch downLatch = new CountDownLatch(1);zookeeper = new ZooKeeper("123.57.252.59:2181", 10000, new Watcher() {public void process(WatchedEvent watchedEvent) {if (watchedEvent.getState() == Event.KeeperState.SyncConnected) {System.out.println("连接成功!");downLatch.countDown();}}});downLatch.await();}@Afterpublic void close() {try {zookeeper.close();} catch (InterruptedException e) {e.printStackTrace();}}
}
1、同步更新
/*** -1 代表不做修改,不做修改不是版本号不变(只是不需要对应删除节点的版本号了;因为删除节点需要版本号对应,否者会删除失败)* 更新节点* @throws KeeperException* @throws InterruptedException*/@Testpublic void update() throws KeeperException, InterruptedException {zookeeper.setData("/update/node1", "node-one".getBytes(), 0);}
@Testpublic void update2() throws KeeperException, InterruptedException {Stat stat = zookeeper.setData("/update/node2", "node-two".getBytes(), 0);System.out.println(stat.getCversion());System.out.println(stat.getVersion());}
2、异步更新
@Testpublic void update3() {zookeeper.setData("/update/node3", "node3-three".getBytes(), 1, new AsyncCallback.StatCallback() {//回调函数public void processResult(int i, String s, Object o, Stat stat) {// 0代表修改成功System.out.println(i);//s代码pathSystem.out.println(s);//o代表上下文对象,也就是下面的context字符串System.out.println(o);//stat代表属性描述对象System.out.println(stat.getVersion());}}, "context");}
三、API之删除节点
delete(String path,int dataVersion)
delete(String path,int dataVersion,AsyncCallback.VoidCallback)
1、同步删除
@Testpublic void delete() throws KeeperException, InterruptedException {zookeeper.delete("/delete/node1", -1);}
2、异步删除
@Testpublic void delete2() throws InterruptedException {zookeeper.delete("/delete/node2", 0, new AsyncCallback.VoidCallback() {public void processResult(int i, String s, Object o) {System.out.println(i);System.out.println(s);System.out.println(o);}},"context");Thread.sleep(10000);System.out.println("结束!");}
四、API之查看节点
getData(String path,boolean watcher,Stat stat)
getData(String path,boolean watcher, AsyncCallback.DataCallback)
1、同步查看
@Testpublic void get() throws KeeperException, InterruptedException {Stat stat = new Stat();byte[] data = zookeeper.getData("/get/node1", false, stat);System.out.println(new String(data));System.out.println(stat.getVersion());}
1、异步查看
@Testpublic void get2() {zookeeper.getData("/get/node1", false, new AsyncCallback.DataCallback() {public void processResult(int i, String s, Object o, byte[] bytes, Stat stat) {System.out.println(i);System.out.println(s);System.out.println(o);System.out.println(new String(bytes));System.out.println(stat.getVersion());}}, "context");}
五、API之查看所有子节点
getChildren(String path,bookean watcher)
getChildren(String path,boolean watcher,AsyncCallback.ChildrenCallback)
1、同步查看
@Testpublic void getChild() throws KeeperException, InterruptedException {List<String> list = zookeeper.getChildren("/get", false);for (String temp : list) {System.out.println(temp);}}
2、异步查看
@Testpublic void getChild2() throws InterruptedException {zookeeper.getChildren("/get", false, new AsyncCallback.ChildrenCallback() {public void processResult(int i, String s, Object o, List<String> list) {System.out.println(i);System.out.println(s);System.out.println(o);for (String cur : list)System.out.println(cur);}}, "context");Thread.sleep(1000);}
六、API之查看节点是否存在
exists(String path,boolean watcher)
exists(String path,boolean watcher,AsyncCallback.StatCallback)
1、同步查看
@Testpublic void exists() throws KeeperException, InterruptedException {Stat exists = zookeeper.exists("/get/node1", false);System.out.println(exists);}
2、异步查看
@Testpublic void exists2() throws InterruptedException {zookeeper.exists("/get/node1", false, new AsyncCallback.StatCallback() {public void processResult(int i, String s, Object o, Stat stat) {System.out.println(i);System.out.println(s);System.out.println(o);System.out.println(stat.getVersion());}}, "context");Thread.sleep(1000);}
Ⅴ:zookeeper的相关Java Api相关推荐
- Ⅱ:zookeeper的相关shell命令
2021年Zookeeper最新系列 ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ...
- 【ZooKeeper Notes 3】ZooKeeper Java API 使用样例
查看PDF版本 转载请注明:@ni掌柜 nileader@gmail.com ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务框架,包含一组简单的原语集合.通过这些原语言的组合使用, ...
- 2021年大数据ZooKeeper(五):ZooKeeper Java API操作
目录 ZooKeeper Java API操作 引入maven坐标 节点的操作 ZooKeeper Java API操作 这里操作Zookeeper的JavaAPI使用的是一套zookeeper客户端 ...
- 14.ZooKeeper Java API 使用样例
转自:http://www.aboutyun.com/thread-7332-1-1.html 1 package com.taobao.taokeeper.research.sample; 2 3 ...
- Zookeeper之java api详解
znode是Zookeeper集合的核心组件,Zookeeper api提供了一小组方法使用Zookeeper集合来操纵znode的所有细节.这里没有涉及watch相关的api,另外介绍. 客户端应该 ...
- Linux -- 基于zookeeper的java api(二)
Linux -- 基于zookeeper的java api(二) 写一个关于基于集群的zookeeper的自定义实现HA 基于客户端和监控器:使用监控的方法查看每个注册过的节点的状态来做出操作. Wa ...
- zookeeper入门学习之java api会话建立《四》
在上一篇zk中简单玩了下api的连接创建会话,也总是留下了很多坑,就是那些引申开来,搞不明白的问题.有时候想追究起来,问题总是那么无穷无尽,有时候问题比答案更有力度吧,到最后都是些哲学问题吗?存在的这 ...
- Elasticsearch Java API 分组、聚合、嵌套相关查询
Elasticsearch Java API 分组.聚合.嵌套相关查询 翼支付监控系统正使用es做后端存储,这边我们是将日志计算处理过后的数据通过kafka储存到es.选择用es作为数据储存端是考虑到 ...
- java api 设计_Java API设计实践
使你的API在模块化和非模块化Java环境中都可用 在优锐课的java学习分享中,对微服务有了更深层次的新概念.关于API设计实践一点就通了. 介绍 了解设计Java API时应应用的一些API设计实 ...
最新文章
- uicontrol图形对象用户界面的用法
- U2L蔚然成风,曙光为什么能抢了VMware的风头?
- android 使用浏览器打开指定页面
- Spring Security并发会话控制示例教程–如何限制Java JEE Web应用程序中的用户会话数...
- python123测验答案测验3_知到app数学分析3-3测验答案查询服务
- 在centos 6.5下安装svn (Subversion)
- 偶然的相遇【我与51CTO的故事】
- 海康威视摄像头激活失败的几个原因和方法
- 分区助手服务器,分区助手专业版
- APP微信登录后端PHP,PHP开发微信授权登录教程
- 服务器出现502错误,怎么办。
- java 图片 加边框_给图片加图片边框 图片边框要求为PNG格式
- matlab 求傅里叶级数,MATLAB傅里叶级数.docx
- SwiftUI中微信认证成功但App回调方法未被调用的解决
- Milvus以图搜图环境搭建
- 2908. Annoying painting tool
- Django 2.1.7 Celery 4.3.0 Periodic Tasks 周期性任务调度
- thinningopencv
- React Native与原生的图片交互问题
- SSH(远程登录和文件复制)
热门文章
- 压力测试+webbench+ab+tsung+siege
- 【iBoard电子学堂】【iCore双核心板】资料光盘A盘更新,版本号为A6
- 计算机基础7试题,大学计算机应用基础试题
- 使用read_html爬取网页表哥,Python笔记:用read_html()爬取table形式表格的网络数据...
- elementui 响应式导航栏网站_什么是响应式网站?响应式网站的优势介绍
- mysql.net开发驱动_mysql数据库.net开发驱动(mysql connector net )
- gunicorn 配置日志
- java中打印输出数组内容的三种方式
- linux代码调节亮度,linux 屏幕亮度调整命令
- java handler null_java – 在调用之前,如何确保另一个Thread的Handler不为null?