`
weitao1026
  • 浏览: 988935 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Curator是Netflix开源的一套ZooKeeper客户端框架

阅读更多

Curator是Netflix开源的一套ZooKeeper客户端框架,用它来操作zookeeper更加简单方便,按Curator官方所比喻的,guava to JAVA, Curator to Zookeeper,Curator采用了fluent风格的代码,非常简洁。

有关curator的介绍:请参照官方文档:http://curator.apache.org/index.html

本篇主要看下,使用curator操作zookeeper的一些基础例子:
主要的功能:
1,在zk上添加,或更新数据
2,删除zk节点上数据
3,读取某个节点上的数据
4,上传一些本地文件到zk节点上
5,检查zookeeper上是否存在某个节点路径

核心代码如下:

Java代码 复制代码 收藏代码
  1. package com.qin.curator.zk;  
  2.   
  3. import java.io.File;  
  4. import java.util.List;  
  5.   
  6. import org.apache.commons.io.FileUtils;  
  7. import org.apache.curator.CuratorZookeeperClient;  
  8. import org.apache.curator.RetryPolicy;  
  9. import org.apache.curator.framework.CuratorFramework;  
  10. import org.apache.curator.framework.CuratorFrameworkFactory;  
  11. import org.apache.curator.framework.CuratorFrameworkFactory.Builder;  
  12. import org.apache.curator.framework.api.CreateBuilder;  
  13. import org.apache.curator.retry.ExponentialBackoffRetry;  
  14. import org.apache.zookeeper.WatchedEvent;  
  15. import org.apache.zookeeper.Watcher;  
  16. import org.apache.zookeeper.ZKUtil;  
  17.   
  18. import framework.CrudExamples;  
  19. /** 
  20.  * @author qindongliang 
  21.  * curator操作zookeeper的 
  22.  * 基本例子 
  23.  * **/  
  24. public class CuratorTools {  
  25.       
  26.     static CuratorFramework zkclient=null;  
  27.     static String nameSpace="php";  
  28.     static {  
  29.           
  30.           String zkhost="192.168.46.22:2181";//zk的host  
  31.           RetryPolicy rp=new ExponentialBackoffRetry(10003);//重试机制  
  32.           Builder builder = CuratorFrameworkFactory.builder().connectString(zkhost)  
  33.                   .connectionTimeoutMs(5000)  
  34.                   .sessionTimeoutMs(5000)  
  35.                   .retryPolicy(rp);  
  36.           builder.namespace(nameSpace);  
  37.           CuratorFramework zclient = builder.build();  
  38.           zkclient=zclient;  
  39.           zkclient.start();// 放在这前面执行  
  40.           zkclient.newNamespaceAwareEnsurePath(nameSpace);  
  41.             
  42.     }  
  43.       
  44.     public static void main(String[] args)throws Exception {  
  45.         CuratorTools ct=new  CuratorTools();  
  46.         //ct.getListChildren("/zk/bb");  
  47.         //ct.upload("/jianli/123.txt", "D:\\123.txt");  
  48.         //ct.createrOrUpdate("/zk/cc334/zzz","c");  
  49.         //ct.delete("/qinb/bb");  
  50.         //ct.checkExist("/zk");  
  51.         ct.read("/jianli/123.txt");  
  52.         zkclient.close();  
  53.           
  54.           
  55.     }  
  56.   
  57.     /** 
  58.      * 创建或更新一个节点 
  59.      *  
  60.      * @param path 路径 
  61.      * @param content 内容 
  62.      * **/  
  63.     public void createrOrUpdate(String path,String content)throws Exception{  
  64.            
  65.         zkclient.newNamespaceAwareEnsurePath(path).ensure(zkclient.getZookeeperClient());  
  66.         zkclient.setData().forPath(path,content.getBytes());      
  67.         System.out.println("添加成功!!!");  
  68.           
  69.     }  
  70.       
  71.     /** 
  72.      * 删除zk节点 
  73.      * @param path 删除节点的路径 
  74.      *  
  75.      * **/  
  76.     public void delete(String path)throws Exception{  
  77.         zkclient.delete().guaranteed().deletingChildrenIfNeeded().forPath(path);  
  78.         System.out.println("删除成功!");  
  79.     }  
  80.       
  81.       
  82.     /** 
  83.      * 判断路径是否存在 
  84.      * @param path 
  85.      * **/  
  86.     public void checkExist(String path)throws Exception{  
  87.           
  88.         if(zkclient.checkExists().forPath(path)==null){  
  89.             System.out.println("路径不存在!");  
  90.         }else{  
  91.             System.out.println("路径已经存在!");  
  92.         }  
  93.           
  94.     }  
  95.       
  96.     /** 
  97.      * 读取的路径 
  98.      * @param path 
  99.      * **/  
  100.     public void read(String path)throws Exception{  
  101.            
  102.        
  103.         String data=new String(zkclient.getData().forPath(path),"gbk");  
  104.           
  105.         System.out.println("读取的数据:"+data);  
  106.           
  107.     }  
  108.       
  109.       
  110.     /** 
  111.      * @param path 路径 
  112.      * 获取某个节点下的所有子文件 
  113.      * */  
  114.     public void getListChildren(String path)throws Exception{  
  115.           
  116.         List<String> paths=zkclient.getChildren().forPath(path);  
  117.         for(String p:paths){  
  118.             System.out.println(p);  
  119.         }  
  120.           
  121.     }  
  122.       
  123.     /** 
  124.      * @param zkPath zk上的路径 
  125.      * @param localpath 本地上的文件路径 
  126.      *  
  127.      * **/  
  128.     public void upload(String zkPath,String localpath)throws Exception{  
  129.           
  130.         createrOrUpdate(zkPath, "");//创建路径  
  131.         byte[] bs=FileUtils.readFileToByteArray(new File(localpath));  
  132.         zkclient.setData().forPath(zkPath, bs);  
  133.         System.out.println("上传文件成功!");  
  134.           
  135.           
  136.     }  }  
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics