广告
返回顶部
首页 > 资讯 > 后端开发 > Python >【ZooKeeper Notes 3】Z
  • 907
分享到

【ZooKeeper Notes 3】Z

ZooKeeperNotes 2023-01-31 04:01:25 907人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

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

查看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 

 

--结束END--

本文标题: 【ZooKeeper Notes 3】Z

本文链接: https://www.lsjlt.com/news/187903.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

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

下载Word文档
猜你喜欢
  • 【ZooKeeper Notes 3】Z
    查看PDF版本 转载请注明:@ni掌柜 nileader@gmail.com ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务框架,包含一组简单的原语集合。通过这些原语言的组合使用,能够帮助我们解决更高层次的分布式问题,关...
    99+
    2023-01-31
    ZooKeeper Notes
  • zookeeper-3. java操作z
    对于Zookeeper的建立连接、增删改查、以及监视节点的变化操作。一、简单实例操作zookeeper原生API1. 创建会话方法:客户端可以通过创建一个zookeeper实例来连接zookeeper服务器。参数说明:connectStri...
    99+
    2023-01-31
    操作 zookeeper java
  • java连接zookeeper的3种方式小结
    目录java连接zookeeper3种方式1、使用zookeeper原始api2、使用ZkClient客户端连接,这种连接比较简单3、使用curator连接Java集成zookeep...
    99+
    2022-11-12
  • css3中的3维平面z轴有没有负值
    本文小编为大家详细介绍“css3中的3维平面z轴有没有负值”,内容详细,步骤清晰,细节处理妥当,希望这篇“css3中的3维平面z轴有没有负值”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新...
    99+
    2022-10-19
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作