当前位置: 首页 > news >正文

Java代码操作ZooKeeper(使用原生 ZooKeeper 客户端库)

1.6.1 连接Zookeeper
1.6.1.1 添加 Maven 依赖
<dependency><groupId>org.apache.zookeeper</groupId><artifactId>zookeeper</artifactId><version>3.7.0</version>
</dependency>
1.6.1.2 编写 Java 代码
import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.ZooKeeper;import java.io.IOException;public class ConnectZookeeper {private static final String ZK_HOST = "192.168.200.138:2181";private static final int CONNECT_TIMEOUT = 20000;  // 设置超时时间需要合理public static void main(String[] args) throws IOException, InterruptedException {// 创建一个ZooKeeper客户端实例ZooKeeper zk = new ZooKeeper(ZK_HOST, CONNECT_TIMEOUT, event -> {System.out.println("Watcher的process被调用了");if (event.getState() == Watcher.Event.KeeperState.SyncConnected) {System.out.println("连接成功");}if (event.getState() == Watcher.Event.KeeperState.Closed) {System.out.println("连接关闭");}});System.out.println("客户端开始连接ZK服务器");// 等待连接到ZooKeeperZooKeeper.States state = zk.getState();System.out.println(state);Thread.sleep(20000);state = zk.getState();System.out.println(state);Thread.sleep(20000);zk.close();}
}

可以看到如下运行结果:

客户端开始连接ZK服务器
CONNECTING
Watcher的process被调用了
连接成功
CONNECTED
Watcher的process被调用了
连接关闭
1.6.2 增删改查操作及Watcher监听
import org.apache.zookeeper.*;import java.io.IOException;public class ZookeeperCRUD {private static final String ZK_HOST = "192.168.200.138:2181";private static final int CONNECT_TIMEOUT = 20000;  // 设置超时时间需要合理private static final String PATH = "/my_crud_node";public static void main(String[] args) throws IOException, InterruptedException, KeeperException {// 创建一个ZooKeeper客户端实例ZooKeeper zk = new ZooKeeper(ZK_HOST, CONNECT_TIMEOUT, event -> {if (event.getState() == Watcher.Event.KeeperState.SyncConnected) {System.out.println("连接成功");}// 监听数据变化if (event.getType()== Watcher.Event.EventType.NodeDataChanged) {System.out.println("数据被改变");}if (event.getType()== Watcher.Event.EventType.NodeDeleted) {System.out.println("节点已删除");}if (event.getState() == Watcher.Event.KeeperState.Closed) {System.out.println("连接关闭");}});ZooKeeper.States state = zk.getState();System.out.println(state);Thread.sleep(20000);state = zk.getState();System.out.println(state);Thread.sleep(2000);//对节点进行增删改查// PERSISTENT 节点是一种持久化的节点类型,它在客户端会话结束时不会自动删除,而是会一直保留在 ZooKeeper 中,直到被显式删除zk.create(PATH, "I like ZooKeeper".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);byte[] data;data = zk.getData(PATH, true, null);System.out.println(new String(data));zk.setData(PATH, "I like Java".getBytes(), -1);// 第二个参数设置成true,表示开启监听data = zk.getData(PATH, true, null);System.out.println(new String(data));zk.delete(PATH, -1);zk.close();}
}

http://www.mrgr.cn/news/69821.html

相关文章:

  • leetcode 148. 排序链表 中等
  • uniapp 集成 uview
  • React diff算法和Vue diff算法的主要区别
  • [Codesys]常用功能块应用分享-BMOV功能块功能介绍及其使用实例说明
  • 基于SpringBoot+Vue实现剧本杀服务平台【源码+LW+PPT+部署】
  • NLP论文速读(NeurIPS2024)|使用视觉增强的提示来增强视觉推理
  • SpringBoot框架的简介及实现步骤
  • GPT-5 终于来了 —— 人们的预期与现实
  • 人工智能在智能交通系统中的应用
  • 4.3软件设计:面对对象的设计
  • 洛古---越狱问题【快速幂】
  • python manage.py命令集
  • Spring IOC 和Spring Aop
  • 漫谈分布式唯一ID
  • 【双十一特惠】腾讯云省钱攻略:如何智取云计算资源
  • goframe开发一个企业网站 rabbitmq队例15
  • p4dctl命令工具
  • 丹摩征文活动|Faster-Rcnn-训练与测试详细教程
  • [NeurIPS 2024]Long-range Brain Graph Transformer
  • Spark:背压机制
  • 优选算法 - 1 ( 双指针 移动窗口 8000 字详解 )
  • 简单的链表相加
  • 华为机试HJ33 整数与IP地址间的转换
  • RabbitMQ集群搭建
  • spring cloud实战总结(优雅下线、灰度发布)
  • 推荐一款批量自动识别图片方向的软件:批量校正图像方向工具