newClient()工厂方法创建一个新的客户端实例,默认会话超时和默认连接超时。 它需要一个连接字符串,是ZooKeeper主机-端口对列表和要使用的重试策略。
CuratorFramework有一个命名空间的概念。 通过这个,可以在使用构造器方法创建CuratorFramework实例时设置命名空间。 当其中一个API被调用时,该框架将该命名空间预加载到所有路径:
CuratorFrameworkFactory.Builder builder = CuratorFrameworkFactory.builder(); CuratorFramework client = builder.connectString (server.getConnectString()).namespace("MyApp").retryPolicy(new RetryOneTime(1)).build(); client.create().forPath("/test_znode", data);在这里,尽管znode的名称被指定为/test_znode,但是创建的实际znode是/MyApp/test_znode。
Curator框架还提供了一个名为CuratorTempFramework的有限功能框架接口,用于通过不可靠的网络(如WAN)进行临时连接。 在这个框架中,如果会话保持空闲一段时间,ZooKeeper连接将被关闭。
四 Curator recipeCurator为ZooKeeper提供了一系列随时可用的recipe。 Curator实现的recipe的详细列表和描述可以从的项目页面中获取。
在这里,将简略地介绍一下ZooKeeper的recipe:
领导者选举:Curator为领导选举提供了两种算法:领导者锁定(leader latch)和领导者选择( leader selector)。两种算法在连接到Zookeeper集群的多个竞争者中选择一个“领导者”。
在领导者锁定中,如果一组n个参与者与竞争领导,则将n个参与者中的一个随机分配为领导,而在领导选择中,按照到达该Zookeeper服务器的请求的顺序来选择领导。 当领导者解除领导时,选择集群中的n个参与者的另一个竞争者。
锁:Curator实现以下不同类型的分布式锁:
共享重入锁:这种类型的锁提供全局同步的全分布锁。
共享锁:这是非重入共享重入锁。
共享重入读/写锁:这是一个可跨JVM使用的重入读/写互斥锁。
共享信号量:这是一个计数信号量(semaphore),可以跨JVM使用。
多锁共享:这是用来管理多个锁作为一个单一的实体。 acquire()调用获取所有的锁。 如果呼叫失败,所有获得的路径被释放。 release()调用释放所有托管的锁。
屏障(Barrier):这是屏障和双重屏障的具体实现。
计数器:提供了一种机制来管理共享计数器的共享整数。它还给出了分布式原子增量的分布式原子长整型,分布式原子整型和分布式原子值的机制。
缓存:缓存是通过路径缓存,节点缓存和树缓存recipe实现的,分别保存ZK路径的znode,本地缓存节点和所有本地缓存的子节点的状态变化数据。
队列:这提供了分布式队列实现。 支持以下不同类型的队列:
分布式队列:这是一个简单的分布式队列,其中放入队列中的条目是在FIFO中排序的。
分布式ID队列:这是一个分布式队列的版本,允许一些标识符与队列项相关联。
分布式优先级队列:这是ZooKeeper的分布式优先级队列的实现。在内部,它使用一个分布式队列,其中可以将优先级指定给项目。
分布式延迟队列:这是使用时间作为优先级的分布式优先级队列的变体。当将条目添加到队列时,会给出一个延迟值。直到超过延迟时间,该项目将被发送给消费者。
简单的分布式队列:这是ZooKeeper分布式org.apache.zookeeper.recipes.queue.DistributedQueue队列的一部分替代实现。
节点:这提供了一个persistent ephemeral节点的recipe;这是一个ephemeral的节点,即使在连接和会话中断的情况下也会试图保持在ZooKeeper中。
五 Curator实用程序Curator类库也为ZooKeeper提供了一些有用的工具。 其中一些如下所示:
Test server:这是一个可用于本地进程ZooKeeper服务器的测试
Test cluster:这是一个内部运行的用于ZooKeeper服务器ensemble的测试
ZKPaths:提供了各种使用ZooKeeper znode路径的静态方法
EnsurePath:确保在使用之前创建特定znode路径的实用程序
BlockingQueueConsumer:一个类似于Java中的BlockingQueue的队列消费者
Reaper:删除没有子节点的路径和没有数据的节点的实用程序
六 Curator扩展Curator扩展包除了包含在recipe包中那些外,还包括额外的recipe。 扩展包中的recipe具有curator-x-name的命名约定。
Curator目前提供以下扩展功能:
Service discovery:这是一个使用ZooKeeper作为服务发现机制的系统。
Service discovery server:这是一个使用REST服务进行非Java和遗留程序的Curator服务发现。 它公开RESTful Web服务来注册,删除和查询服务。
Curator RPC proxy:该模块实现了一个代理,将非Java环境与Curator框架和recipe桥接在一起。 它使用Apache Thrift,使大量的语言和环境使用Curator的功能,并统一ZooKeeper跨语言/环境的用法。