zoukankan      html  css  js  c++  java
  • Zookeeper的基本操作

    写在前面的话:读书破万卷,编码如有神

    --------------------------------------------------------------------

    参考内容:

      《私塾在线》,cc老师

    --------------------------------------------------------------------

    主要内容包括:

    • zkCli的操作
    • 四字命令
    • zookeeper的java客户端操作

    --------------------------------------------------------------------

    1、zkCli的操作                                                                             

    进入zookeeper的安装目录下的bin目录

    通过zkCli.sh进行连接

    通过help查看有什么命令可以使用

    (1)stat path 查看当前path结点的消息

    (2)get path 、set path是给当前path节点设置值和获取值

    (3)ls path 是列出当前路径有哪些节点

    (4)create [-s] [-e] path data acl

    通过create可以在path路径上创建一个节点

    参数

      [-s]: 可选,代表一个序列号

      [-e]: 可选,代表一个临时节点

      path: 代表节点创建的路径

      data: 代表该节点的值

      acl: 代表access control list

    (5)delete path [version]

    通过delete可以删除path路径上的节点(如果有子节点,则不能删除)

    (6)rmr path

    通过rmr可以删除path路径上的节点(包括子节点)

    ---------------------------------------------------------------------------

    2、四字命令                                                                                 

      zookeeper支持某些特定的四字命令,他们大多是用来查询zookeeper服务的当前状态及相关信息的.

    (1)conf : 输出相关服务配置的详细信息

    (2)cons : 列出所有连接到服务器的客户端的完全的连接 、会话的详细信息。包括"接收/发送"的包数量、会话Id、操作延迟、最后的操作执行等信息

    (3)dump : 列出未经处理的会话和临时节点

    (4)envi : 输出关于服务环境的详细信息

    (5)reqs : 列出未经处理的请求

    (6)ruok : 测试服务是否处于正确状态。如果确实如此,那么服务返回"imok",否则不做任何相应

    (7)stat : 输出关于性能和连接的客户端的列表

    (8)wchs : 列出服务器watch的详细信息

    (9)wchc : 通过session列出服务器watch的详细信息,它的输出是一个与watch相关的会话的列表

    (10)wchp : 通过路径列出服务器watch的详细信息。它输出一个与session相关的路径 

    ---------------------------------------------------------------------------

    3、zookeeper的java客户端操作

    创建一个maven项目,在pom.xml文件中添加zookeeper相关的依赖包:

     1 <dependency>
     2       <groupId>com.101tec</groupId>
     3       <artifactId>zkclient</artifactId>
     4       <version>0.10</version>
     5 </dependency>
     6 <dependency>
     7       <groupId>org.apache.zookeeper</groupId>
     8       <artifactId>zookeeper</artifactId>
     9       <version>3.4.9</version>
    10 </dependency>

    zookeeperTest.java

     1 import org.apache.zookeeper.CreateMode;
     2 import org.apache.zookeeper.KeeperException;
     3 import org.apache.zookeeper.ZooDefs;
     4 import org.apache.zookeeper.ZooKeeper;
     5 import org.apache.zookeeper.data.Stat;
     6 
     7 import java.io.IOException;
     8 
     9 
    10 public class zookeeperTest {
    11     /**
    12      * 连接到zookeeper服务,并且返回一个实例
    13      * @param zk  zookeeper引用
    14      * @param hostPort  ip地址
    15      * @param sessionTime 超时时间
    16      * @return zookeeper的实例
    17      */
    18     private ZooKeeper startZK(ZooKeeper zk,String hostPort,int sessionTime){
    19         try {
    20             zk = new ZooKeeper(hostPort,sessionTime,null);
    21         } catch (IOException e) {
    22             e.printStackTrace();
    23         }
    24         return zk;
    25     }
    26 
    27     /**
    28      * 关闭zookeeper的连接
    29      * @param zk zookeeper实例
    30      */
    31     private void stopZK(ZooKeeper zk){
    32         try {
    33             zk.close();
    34         } catch (InterruptedException e) {
    35             e.printStackTrace();
    36         }
    37     }
    38 
    39     /**
    40      * 在zookeeper上创建一个节点
    41      * @param zk zookeeper实例
    42      * @param nodePath 要创建的节点path
    43      * @param nodeData 要创建的节点data
    44      * @param cm 创建节点的Mode
    45      */
    46     private void createNode(ZooKeeper zk, String nodePath, String nodeData, CreateMode cm){
    47         try {
    48             zk.create(nodePath,nodeData.getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE,cm);
    49         } catch (KeeperException e) {
    50             e.printStackTrace();
    51         } catch (InterruptedException e) {
    52             e.printStackTrace();
    53         }
    54     }
    55 
    56     /**
    57      * 获取zookeeper的path节点的值
    58      * @param zk zookeeper实例
    59      * @param nodePath 节点的值
    60      * @return zookeeper的path节点的值
    61      */
    62     private  String getNode(ZooKeeper zk,String nodePath){
    63         byte[] rets = null;
    64         try {
    65             rets = zk.getData(nodePath, false, new Stat());
    66         } catch (KeeperException e) {
    67             e.printStackTrace();
    68         } catch (InterruptedException e) {
    69             e.printStackTrace();
    70         }
    71         return new String(rets);
    72     }
    73 
    74     public static void main(String[] args) {
    75         zookeeperTest zkt = new zookeeperTest();
    76 
    77         //zookeeper实例的引用
    78         ZooKeeper zooKeeper = null;
    79 
    80         //创建一个zookeeper实例
    81         zooKeeper = zkt.startZK(zooKeeper, "127.0.0.1:2181", 20000);
    82 
    83         //创建一个节点
    84         zkt.createNode(zooKeeper,"/zkTest","zkDatas",CreateMode.PERSISTENT);
    85 
    86         //获取指定路径上的节点的值
    87         String result = zkt.getNode(zooKeeper,"/zkTest");
    88 
    89         System.out.println("result = " + result);
    90 
    91         zkt.stopZK(zooKeeper);
    92     }
    93 }

    查看

  • 相关阅读:
    Linux用户态程序计时方式详解
    我的代码重构经验
    基于链表的C语言堆内存检测
    C语言内存使用的常见问题及解决之道
    1151 LCA in a Binary Tree (30 分)
    1150 Travelling Salesman Problem (25 分)
    1149 Dangerous Goods Packaging (25 分)
    1148 Werewolf
    1155 Heap Paths (30 分)
    1154 Vertex Coloring (25 分)
  • 原文地址:https://www.cnblogs.com/xinhuaxuan/p/6664403.html
Copyright © 2011-2022 走看看