黑马程序员技术交流社区

标题: 【广州校区】【原创】Curator使用 [打印本页]

作者: 帅气de路人甲    时间: 2020-4-16 12:20
标题: 【广州校区】【原创】Curator使用
概述:
        Curator是Netflix公司开源的一套zookeeper客户端框架

好处:
        解决了很多Zookeeper客户端非常底层的细节开发工作,包括连接重连、反复注册和异常等...

基本API
        1、创建会话
                使用静态工程方法创建
                        RetryPolicy retryPolicy = new ExponentialBackoffRetry(1000, 3);
                        CuratorFramework client = CuratorFrameworkFactory.newClient("localhost:2181", 5000, 5000, retryPolicy);
               
                使用Fluent风格api创建
                        RetryPolicy retryPolicy = new ExponentialBackoffRetry(1000, 3);
                        CuratorFramework client = CuratorFrameworkFactory.builder()
                                .connectString("192.168.128.129:2181")
                                .sessionTimeoutMs(5000)
                                .connectionTimeoutMs(5000)
                                .retryPolicy(retryPolicy)
                                .namespace("base")
                                .build();
                        client.start();

        2、创建数据节点
                                client.create().creatingParentContainersIfNeeded()
                        .withMode(CreateMode.PERSISTENT).forPath("/nodeA", "init".getBytes());

        3、删除数据节点
                  client.delete().guaranteed().deletingChildrenIfNeeded().withVersion(10086).forPath("/nodeA");

        4、读取数据节点
        读数据,返回值为byte[]
                        byte[] bytes = client.getData().forPath("/nodeA");
                System.out.println(new String(bytes));
        读stat
                        Stat stat = new Stat();
                client.getData().storingStatIn(stat).forPath("/nodeA");

        5、修改数据节点
                        client.setData().withVersion(10086).forPath("/nodeA", "data".getBytes());

        6、事务
        client.inTransaction().check().forPath("/nodeA")
                        .and()
                        .create().withMode(CreateMode.EPHEMERAL).forPath("/nodeB", "init".getBytes())
                        .and()
                        .create().withMode(CreateMode.EPHEMERAL).forPath("/nodeC", "init".getBytes())
                        .and()
                        .commit();
        7、其他
                      client.checkExists().forPath("/nodeA");
                client.getChildren().forPath("/nodeA");







欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2