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相关推荐

  1. Ⅱ:zookeeper的相关shell命令

    2021年Zookeeper最新系列 ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ...

  2. 【ZooKeeper Notes 3】ZooKeeper Java API 使用样例

    查看PDF版本 转载请注明:@ni掌柜 nileader@gmail.com ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务框架,包含一组简单的原语集合.通过这些原语言的组合使用, ...

  3. 2021年大数据ZooKeeper(五):ZooKeeper Java API操作

    目录 ZooKeeper Java API操作 引入maven坐标 节点的操作 ZooKeeper Java API操作 这里操作Zookeeper的JavaAPI使用的是一套zookeeper客户端 ...

  4. 14.ZooKeeper Java API 使用样例

    转自:http://www.aboutyun.com/thread-7332-1-1.html 1 package com.taobao.taokeeper.research.sample; 2 3 ...

  5. Zookeeper之java api详解

    znode是Zookeeper集合的核心组件,Zookeeper api提供了一小组方法使用Zookeeper集合来操纵znode的所有细节.这里没有涉及watch相关的api,另外介绍. 客户端应该 ...

  6. Linux -- 基于zookeeper的java api(二)

    Linux -- 基于zookeeper的java api(二) 写一个关于基于集群的zookeeper的自定义实现HA 基于客户端和监控器:使用监控的方法查看每个注册过的节点的状态来做出操作. Wa ...

  7. zookeeper入门学习之java api会话建立《四》

    在上一篇zk中简单玩了下api的连接创建会话,也总是留下了很多坑,就是那些引申开来,搞不明白的问题.有时候想追究起来,问题总是那么无穷无尽,有时候问题比答案更有力度吧,到最后都是些哲学问题吗?存在的这 ...

  8. Elasticsearch Java API 分组、聚合、嵌套相关查询

    Elasticsearch Java API 分组.聚合.嵌套相关查询 翼支付监控系统正使用es做后端存储,这边我们是将日志计算处理过后的数据通过kafka储存到es.选择用es作为数据储存端是考虑到 ...

  9. java api 设计_Java API设计实践

    使你的API在模块化和非模块化Java环境中都可用 在优锐课的java学习分享中,对微服务有了更深层次的新概念.关于API设计实践一点就通了. 介绍 了解设计Java API时应应用的一些API设计实 ...

最新文章

  1. uicontrol图形对象用户界面的用法
  2. U2L蔚然成风,曙光为什么能抢了VMware的风头?
  3. android 使用浏览器打开指定页面
  4. Spring Security并发会话控制示例教程–如何限制Java JEE Web应用程序中的用户会话数...
  5. python123测验答案测验3_知到app数学分析3-3测验答案查询服务
  6. 在centos 6.5下安装svn (Subversion)
  7. 偶然的相遇【我与51CTO的故事】
  8. 海康威视摄像头激活失败的几个原因和方法
  9. 分区助手服务器,分区助手专业版
  10. APP微信登录后端PHP,PHP开发微信授权登录教程
  11. 服务器出现502错误,怎么办。
  12. java 图片 加边框_给图片加图片边框 图片边框要求为PNG格式
  13. matlab 求傅里叶级数,MATLAB傅里叶级数.docx
  14. SwiftUI中微信认证成功但App回调方法未被调用的解决
  15. Milvus以图搜图环境搭建
  16. 2908. Annoying painting tool
  17. Django 2.1.7 Celery 4.3.0 Periodic Tasks 周期性任务调度
  18. thinningopencv
  19. React Native与原生的图片交互问题
  20. SSH(远程登录和文件复制)

热门文章

  1. 压力测试+webbench+ab+tsung+siege
  2. 【iBoard电子学堂】【iCore双核心板】资料光盘A盘更新,版本号为A6
  3. 计算机基础7试题,大学计算机应用基础试题
  4. 使用read_html爬取网页表哥,Python笔记:用read_html()爬取table形式表格的网络数据...
  5. elementui 响应式导航栏网站_什么是响应式网站?响应式网站的优势介绍
  6. mysql.net开发驱动_mysql数据库.net开发驱动(mysql connector net )
  7. gunicorn 配置日志
  8. java中打印输出数组内容的三种方式
  9. linux代码调节亮度,linux 屏幕亮度调整命令
  10. java handler null_java – 在调用之前,如何确保另一个Thread的Handler不为null?