• zookeeper 编程框架 curator



    Curator框架提供了一套高级的API, 简化了ZooKeeper的操作。 它增加了很多使用ZooKeeper开发的特性,可以处理ZooKeeper集群复杂的连接管理和重试机制。 这些特性包括:

    • 自动化的连接管理: 重新建立到ZooKeeper的连接和重试机制存在一些潜在的错误case。 Curator帮助你处理这些事情,对你来说是透明的。
    • 清爽API:
      • 简化了原生的ZooKeeper的方法,事件等
      • 提供了一个现代的流式接口
    • 提供了Recipes实现: 如前面的文章介绍的那样,基于这些Recipes可以创建很多复杂的分布式应用
    • 增加了事务处理

    Curator框架通过CuratorFrameworkFactory以工厂模式和builder模式创建CuratorFramework实 例。 CuratorFramework实例都是线程安全的,你应该在你的应用中共享同一个CuratorFramework实例.

    工厂方法newClient()提供了一个简单方式创建实例。 而Builder提供了更多的参数控制。一旦你创建了一个CuratorFramework实例,你必须调用它的start()启动,在应用退出时调用close()方法关闭.


    简单编程实例

     1 package org.admln.program.CuratorTest;
     2 
     3 import org.apache.curator.framework.CuratorFramework;
     4 import org.apache.curator.framework.CuratorFrameworkFactory;
     5 import org.apache.curator.retry.RetryNTimes;
     6 import org.apache.zookeeper.CreateMode;
     7 import org.apache.zookeeper.WatchedEvent;
     8 import org.apache.zookeeper.Watcher;
     9 
    10 
    11 /**
    12  * @author admln
    13  * @date 2015年5月13日 上午9:56:36
    14  */
    15 public class CuratorTest {
    16     public static void main(String[] args) throws Exception {
    17         String path = "/test_path";
    18         CuratorFramework client = CuratorFrameworkFactory.builder()
    19                 .connectString("localhost:2181").namespace("brokers")
    20                 .retryPolicy(new RetryNTimes(Integer.MAX_VALUE, 1000))
    21                 .connectionTimeoutMs(5000).build();
    22         // 启动 上面的namespace会作为一个最根的节点在使用时自动创建
    23         client.start();
    24 
    25         // 创建一个节点
    26         client.create().forPath("/head", new byte[0]);
    27 
    28         // 异步地删除一个节点
    29         // client.delete().inBackground().forPath("/head");
    30 
    31         // 创建一个临时节点
    32         client.create().withMode(CreateMode.EPHEMERAL_SEQUENTIAL)
    33                 .forPath("/head/child", new byte[0]);
    34 
    35         // 取数据
    36         client.getData().watched().inBackground().forPath("/test");
    37 
    38         // 检查路径是否存在
    39         client.checkExists().forPath(path);
    40 
    41         // 异步删除
    42         client.delete().inBackground().forPath("/head");
    43 
    44         // 注册观察者,当节点变动时触发
    45         client.getData().usingWatcher(new Watcher() {
    46             public void process(WatchedEvent event) {
    47                 System.out.println("node is changed");
    48             }
    49         }).inBackground().forPath("/test");
    50 
    51         // 结束使用
    52         client.close();
    53     }
    54 }

  • 相关阅读:
    RPD Volume 168 Issue 4 March 2016 评论1
    初步接触CERNVM
    java中重载与重写的区别
    第三节 java 函数
    第二节 java流程控制(循环结构)
    第二节 java流程控制(判断结构+选择结构)
    JAVA 对象引用,以及对象赋值
    Java学习笔记整理第一章 java基本数据类型、修饰符、运算符
    plantuml的使用
    力扣 第210题
  • 原文地址:https://www.cnblogs.com/admln/p/zookeeper-program-frame-curator.html
Copyright © 2020-2023  润新知