ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

zookeeper java的API 入门使用

2022-08-13 21:30:17  阅读:200  来源: 互联网

标签:case java zk zookeeper System break API println out


一.创建简单的maven项目导包 org.apache.zookeeper zookeeper 3.6.3 二。编辑 代码 package com.wqj; import org.apache.zookeeper.*; import org.apache.zookeeper.data.Stat; import java.util.concurrent.CountDownLatch; /** * Hello world! * */ public class App { //连接字符串。zk server zkConnectString地址和端口 private static String zkConnectString ="192.168.0.133:2181,192.168.0.134:2181,192.168.0.135:2181"; // 会话超时时间 单位ms private static int sessionTimeout =3000; //监视器对象 public static void main( String[] args ) throws Exception { System.out.println( "Hello World!" ); //1.创建zk对象 /* //zk有session的概念,没有连接池的概念 //watch: 观察回调,回调。 //watch的注册值发生在 读类型调用 //第一类:new zk 时候,传入的watch,这个watch,session级别的,跟path 、node没有关系 ZooKeeper(String connectString, int sessionTimeout, Watcher watcher) 第一个参数: zookeeper服务器的地址 第二个参数: 超时时间一般为心跳时间的2倍 第三个参数: 该对象用来处理zookeeper服务器响应的事件 */ //加锁同步执行 final CountDownLatch countDownLatch = new CountDownLatch(1); final ZooKeeper zk = new ZooKeeper(zkConnectString, sessionTimeout, new Watcher() { //默认watcher /* * 回调函数: * 当我们需要监听的事件发生以后,那么zookeeper服务器就会调用该方法。 * 当前这个构造器中的该对象是用来响应所有的事件。 * */ @Override public void process(WatchedEvent event) { //获取数据KeeperStatus通知状态 Event.KeeperState state = event.getState(); //获取EventType事件类型 Event.EventType type = event.getType(); //获取地址 String path = event.getPath(); System.out.println("new zk path(创建 zk 连接获取地址:) " +path); //判断数据类型 KeeperStatus通知状态 //switch (state) + 快捷键 Alt +enter switch (state) { case Unknown: break; case Disconnected: break; case NoSyncConnected: break; case SyncConnected: System.out.println("connected(连接创建成功):"); countDownLatch.countDown(); break; case AuthFailed: break; case ConnectedReadOnly: break; case SaslAuthenticated: break; case Expired: break; case Closed: break; } switch (type) { case None: break; case NodeCreated: break; case NodeDeleted: break; case NodeDataChanged: break; case NodeChildrenChanged: break; case DataWatchRemoved: break; case ChildWatchRemoved: break; case PersistentWatchRemoved: break; } } }); countDownLatch.await(); final ZooKeeper.States state = zk.getState(); switch (state) { case CONNECTING: System.out.println("CONNECTING---------------"); break; case ASSOCIATING: System.out.println("ASSOCIATING------------"); break; case CONNECTED: break; case CONNECTEDREADONLY: break; case CLOSED: break; case AUTH_FAILED: break; case NOT_CONNECTED: break; } /*** * final String path, * byte[] data, * List acl, 权限 * OPEN_ACL_UNSAFE : 完全开放的ACL,任何连接的客户端都可以操作该属性znode * CREATOR_ALL_ACL : 只有创建者才有ACL权限 * READ_ACL_UNSAFE:只能读取ACL * CreateMode createMode 节点类型 临时 */ String pathName = zk.create("/wqj", "wqj_wqj".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL); final Stat stat = new Stat(); byte[] node = zk.getData("/wqj", new Watcher() { @Override public void process(WatchedEvent event) { System.out.println("getData watch:--------------"+event.toString()); // System.out.println("没有回调----"); try { zk.getData("/wqj",this,stat); } catch (KeeperException e) { e.printStackTrace(); } catch (InterruptedException e) { e.printStackTrace(); } } },stat); System.out.println("node---"+new String(node)); /** 触发回调 * final String path, * byte[] data, * int version 版本 ,每一次不同 */ Stat stat01 = zk.setData("/wqj", "wqj_0112".getBytes(), 0); //还会回调吗? 还会的 Stat stat02 = zk.setData("/wqj", "wqj_011".getBytes(), stat01.getVersion()); System.out.println("-------async start----------"); zk.getData("/wqj", false, new AsyncCallback.DataCallback() { @Override public void processResult(int rc, String path, Object ctx, byte[] data, Stat stat) { System.out.println("-------async call back----------"); System.out.println(ctx.toString()); System.out.println(new String(data)); } },"wqjj"); System.out.println("-------async over----------"); Thread.sleep(2222); } }

标签:case,java,zk,zookeeper,System,break,API,println,out
来源: https://www.cnblogs.com/wqj-grh/p/16584091.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有