美文网首页
Apache Curator

Apache Curator

作者: 煮茶听雨 | 来源:发表于2017-11-07 16:47 被阅读0次

    1.Curator是Netflix公司开源的一个Zookeeper客户端,与Zookeeper提供的原生客户端相比,Curator的抽象层次更高,简化了Zookeeper客户端的开发量
    2.安装
    3.启动命令 bin/zkServer.sh start
    进入命令行界面 bin/zkCli.sh -server 127.0.0.1:2181
    4.常用命令

    • create:创建路径结点。
    • ls:查看路径下的所有结点。
    • get:获得结点上的值。
    • set:修改结点上的值。
    • delete:删除结点。

    5.maven 引入依赖

       <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-recipes</artifactId>
            <version>2.7.0</version>
        </dependency>
    

    6.简单使用

    package com.cdai.codebase.bigdata.hadoop.zookeeper.curator;
    
    import org.apache.curator.framework.CuratorFramework;
    import org.apache.curator.framework.CuratorFrameworkFactory;
    import org.apache.curator.retry.RetryNTimes;
    
    /**
     * Curator framework's client test.
     * Output:
     *  $ create /zktest hello 
     *  $ ls / 
     *  [zktest, zookeeper]
     *  $ get /zktest 
     *  hello
     *  $ set /zktest world 
     *  $ get /zktest 
     *  world
     *  $ delete /zktest 
     *  $ ls / 
     *  [zookeeper]
     */
    public class CuratorClientTest {
    
        /** Zookeeper info */
        private static final String ZK_ADDRESS = "192.168.1.100:2181";
        private static final String ZK_PATH = "/zktest";
    
        public static void main(String[] args) throws Exception {
            // 1.Connect to zk
            CuratorFramework client = CuratorFrameworkFactory.newClient(
                    ZK_ADDRESS,
                    new RetryNTimes(10, 5000)
            );
            client.start();
            System.out.println("zk client start successfully!");
    
            // 2.Client API test
            // 2.1 Create node
            String data1 = "hello";
            print("create", ZK_PATH, data1);
            client.create().
                    creatingParentsIfNeeded().
                    forPath(ZK_PATH, data1.getBytes());
    
            // 2.2 Get node and data
            print("ls", "/");
            print(client.getChildren().forPath("/"));
            print("get", ZK_PATH);
            print(client.getData().forPath(ZK_PATH));
    
            // 2.3 Modify data
            String data2 = "world";
            print("set", ZK_PATH, data2);
            client.setData().forPath(ZK_PATH, data2.getBytes());
            print("get", ZK_PATH);
            print(client.getData().forPath(ZK_PATH));
    
            // 2.4 Remove node
            print("delete", ZK_PATH);
            client.delete().forPath(ZK_PATH);
            print("ls", "/");
            print(client.getChildren().forPath("/"));
        }
    
        private static void print(String... cmds) {
            StringBuilder text = new StringBuilder("$ ");
            for (String cmd : cmds) {
                text.append(cmd).append(" ");
            }
            System.out.println(text.toString());
        }
    
        private static void print(Object result) {
            System.out.println(
                    result instanceof byte[]
                        ? new String((byte[]) result)
                            : result);
        }
    
    }
    

    7.监听器
    Curator提供了三种Watcher(Cache)来监听结点的变化:

    • Path Cache:监视一个路径下1)孩子结点的创建、2)删除,3)以及结点数据的更新。产生的事件会传递给注册的PathChildrenCacheListener。
    • Node Cache:监视一个结点的创建、更新、删除,并将结点的数据缓存在本地。
    • Tree Cache:Path Cache和Node Cache的“合体”,监视路径下的创建、更新、删除事件,并缓存路径下所有孩子结点的数据。

    相关文章

      网友评论

          本文标题:Apache Curator

          本文链接:https://www.haomeiwen.com/subject/fidjmxtx.html