我的编程空间,编程开发者的网络收藏夹
学习永远不晚

【ZooKeeper Notes 3】Z

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

【ZooKeeper Notes 3】Z

查看PDF版本

转载请注明:@ni掌柜 nileader@gmail.com

ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务框架,包含一组简单的原语集合。通过这些原语言的组合使用,能够帮助我们解决更高层次的分布式问题,关于ZooKeeper的典型使用场景,请查看这个文章《ZooKeeper典型使用场景一览》

本文主要针对ZooKeeper提供的Java API,通过实际代码讲述如何使用API。

  1. package com.taobao.taokeeper.research.sample; 
  2.  
  3. import java.io.IOException; 
  4. import java.util.concurrent.CountDownLatch; 
  5.  
  6. import org.apache.zookeeper.CreateMode; 
  7. import org.apache.zookeeper.KeeperException; 
  8. import org.apache.zookeeper.WatchedEvent; 
  9. import org.apache.zookeeper.Watcher; 
  10. import org.apache.zookeeper.Watcher.Event.KeeperState; 
  11. import org.apache.zookeeper.ZooDefs.Ids; 
  12. import org.apache.zookeeper.ZooKeeper; 
  13.  
  14. import common.toolkit.java.util.ObjectUtil; 
  15.  
  16.  
  17. public class JavaApiSample implements Watcher { 
  18.  
  19.     private static final int SESSION_TIMEOUT = 10000; 
  20.     private static final String CONNECTION_STRING = "test.zookeeper.connection_string:2181"; 
  21.     private static final String ZK_PATH = "/nileader"; 
  22.     private ZooKeeper zk = null; 
  23.      
  24.     private CountDownLatch connectedSemaphore = new CountDownLatch( 1 ); 
  25.  
  26.      
  27.     public void createConnection( String connectString, int sessionTimeout ) { 
  28.         this.releaseConnection(); 
  29.         try { 
  30.             zk = new ZooKeeper( connectString, sessionTimeout, this ); 
  31.             connectedSemaphore.await(); 
  32.         } catch ( InterruptedException e ) { 
  33.             System.out.println( "连接创建失败,发生 InterruptedException" ); 
  34.             e.printStackTrace(); 
  35.         } catch ( IOException e ) { 
  36.             System.out.println( "连接创建失败,发生 IOException" ); 
  37.             e.printStackTrace(); 
  38.         } 
  39.     } 
  40.  
  41.      
  42.     public void releaseConnection() { 
  43.         if ( !ObjectUtil.isBlank( this.zk ) ) { 
  44.             try { 
  45.                 this.zk.close(); 
  46.             } catch ( InterruptedException e ) { 
  47.                 // ignore 
  48.                 e.printStackTrace(); 
  49.             } 
  50.         } 
  51.     } 
  52.  
  53.      
  54.     public boolean createPath( String path, String data ) { 
  55.         try { 
  56.             System.out.println( "节点创建成功, Path: " 
  57.                     + this.zk.create( path, // 
  58.                                               data.getBytes(), // 
  59.                                               Ids.OPEN_ACL_UNSAFE, // 
  60.                                               CreateMode.EPHEMERAL ) 
  61.                     + ", content: " + data ); 
  62.         } catch ( KeeperException e ) { 
  63.             System.out.println( "节点创建失败,发生KeeperException" ); 
  64.             e.printStackTrace(); 
  65.         } catch ( InterruptedException e ) { 
  66.             System.out.println( "节点创建失败,发生 InterruptedException" ); 
  67.             e.printStackTrace(); 
  68.         } 
  69.         return true; 
  70.     } 
  71.  
  72.      
  73.     public String readData( String path ) { 
  74.         try { 
  75.             System.out.println( "获取数据成功,path:" + path ); 
  76.             return new String( this.zk.getData( path, false, null ) ); 
  77.         } catch ( KeeperException e ) { 
  78.             System.out.println( "读取数据失败,发生KeeperException,path: " + path  ); 
  79.             e.printStackTrace(); 
  80.             return ""; 
  81.         } catch ( InterruptedException e ) { 
  82.             System.out.println( "读取数据失败,发生 InterruptedException,path: " + path  ); 
  83.             e.printStackTrace(); 
  84.             return ""; 
  85.         } 
  86.     } 
  87.  
  88.      
  89.     public boolean writeData( String path, String data ) { 
  90.         try { 
  91.             System.out.println( "更新数据成功,path:" + path + ", stat: " + 
  92.                                                         this.zk.setData( path, data.getBytes(), -1 ) ); 
  93.         } catch ( KeeperException e ) { 
  94.             System.out.println( "更新数据失败,发生KeeperException,path: " + path  ); 
  95.             e.printStackTrace(); 
  96.         } catch ( InterruptedException e ) { 
  97.             System.out.println( "更新数据失败,发生 InterruptedException,path: " + path  ); 
  98.             e.printStackTrace(); 
  99.         } 
  100.         return false; 
  101.     } 
  102.  
  103.      
  104.     public void deleteNode( String path ) { 
  105.         try { 
  106.             this.zk.delete( path, -1 ); 
  107.             System.out.println( "删除节点成功,path:" + path ); 
  108.         } catch ( KeeperException e ) { 
  109.             System.out.println( "删除节点失败,发生KeeperException,path: " + path  ); 
  110.             e.printStackTrace(); 
  111.         } catch ( InterruptedException e ) { 
  112.             System.out.println( "删除节点失败,发生 InterruptedException,path: " + path  ); 
  113.             e.printStackTrace(); 
  114.         } 
  115.     } 
  116.  
  117.     public static void main( String[] args ) { 
  118.  
  119.         JavaApiSample sample = new JavaApiSample(); 
  120.         sample.createConnection( CONNECTION_STRING, SESSION_TIMEOUT ); 
  121.         if ( sample.createPath( ZK_PATH, "我是节点初始内容" ) ) { 
  122.             System.out.println(); 
  123.             System.out.println( "数据内容: " + sample.readData( ZK_PATH ) + "\n" ); 
  124.             sample.writeData( ZK_PATH, "更新后的数据" ); 
  125.             System.out.println( "数据内容: " + sample.readData( ZK_PATH ) + "\n" ); 
  126.             sample.deleteNode( ZK_PATH ); 
  127.         } 
  128.  
  129.         sample.releaseConnection(); 
  130.     } 
  131.  
  132.      
  133.     @Override 
  134.     public void process( WatchedEvent event ) { 
  135.         System.out.println( "收到事件通知:" + event.getState() +"\n"  ); 
  136.         if ( KeeperState.SyncConnected == event.getState() ) { 
  137.             connectedSemaphore.countDown(); 
  138.         } 
  139.  
  140.     } 
  141.  

输出结果:

  1. 收到事件通知:SyncConnected 
  2.  
  3. 节点创建成功, Path: /nileader, content: 我是节点初始内容 
  4.  
  5. 获取数据成功,path:/nileader 
  6. 数据内容: 我是节点初始内容 
  7.  
  8. 更新数据成功,path:/nileader, stat: 42950186407,42950186408,1350820182392,1350820182406,1,0,0,232029990722229433,18,0,42950186407 
  9.  
  10. 获取数据成功,path:/nileader 
  11. 数据内容: 更新后的数据 
  12.  
  13. 删除节点成功,path:/nileader 

 

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

【ZooKeeper Notes 3】Z

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

【ZooKeeper Notes 3】Z

查看PDF版本转载请注明:@ni掌柜 nileader@gmail.comZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务框架,包含一组简单的原语集合。通过这些原语言的组合使用,能够帮助我们解决更高层次的分布式问题,关于Z
2023-01-31

zookeeper-3. java操作z

对于Zookeeper的建立连接、增删改查、以及监视节点的变化操作。一、简单实例操作zookeeper原生API1. 创建会话方法:客户端可以通过创建一个zookeeper实例来连接zookeeper服务器。参数说明:connectStri
2023-01-31

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录