标签:
Curator框架提供了一套高级的API, 简化了ZooKeeper的操作。 它增加了很多使用ZooKeeper开发的特性,可以处理ZooKeeper集群复杂的连接管理和重试机制。 这些特性包括:
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 }
标签:
原文地址:http://www.cnblogs.com/admln/p/zookeeper-program-frame-curator.html