标签:删除 自己的 技术 扩展 client -name consumer mes 易用
Apache ZooKeeper是为了帮助解决复杂问题的软件工具,它可以帮助用户从复杂的实现中解救出来。 然而,ZooKeeper只暴露了原语,这取决于用户如何使用这些原语来解决应用程序中的协调问题。 社区已经在ZooKeeper数据模型及其API之上开发了高级框架。 Apache Curator是一个高级的包装类库和框架,使得ZooKeeper非常简单易用。
Tips
Curator最初由Netflix开发,现在是一个Apache项目。 项目页面位于http://curator.apache.org/。
Curator是ZooKeeper的高级类库;它使处理ZooKeeper变得更容易,并扩展了核心ZooKeeper的功能。 Curator在高层次上由以下部分组成:
除了前面的组件外,Curator还附带一些ZooKeeper有用的工具。 Curator堆栈如下图所示:
Curator JARs可以在Maven Central的仓库中找到。 Curator可以很容易地包含在Maven,Gradle,Ivy,SBT等构建脚本中。
各种Maven artifacts在http://mvnrepository.com/artifact/org.apache.curator上列出。
Curator Client是ZooKeeper Java客户端的一个包装器。它使客户端访问ZooKeeper更简单,更不易出错。
Curator客户端提供以下功能:
使用Curator客户端连接ZooKeeper服务器的MyCuratorClient.java
的代码片段如下:
public void myCuratorClient() throws Exception
{
CuratorZookeeperClient client = new CuratorZookeeperClient(server.getConnectString(), 10000, 10000, null,new RetryOneTime(1));
client.start();
try
{
client.blockUntilConnectedOrTimedOut();
String path = client.getZooKeeper().create("/test_znode", "".getBytes(),ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
}
finally
{
client.close();
}
}
CuratorZooKeeperClient
构造方法用于连接到ZooKeeper服务器。 它需要连接字符串或ZooKeeper主机端口对列表,会话和连接超时时间,可选的观察器对象以及要使用的重试策略。 重试策略是客户端在重试连接时尝试各种重试机制的机制。在前面的例子中,使用了一个客户端只会重试一次的策略。
Curator客户端支持以下重试策略:
一旦客户端启动,blockUntilConnectedOrTimedOut
方法直到ZooKeeper连接服务器成功或者连接超时。连接成功之后,创建/testznode
的znode。getZooKeeper()
方法将连接的实例返回给托管的ZooKeeper服务器。
Note
Curator API文档可在http://curator.apache.org/apidocs/index.html察看。
Curator客户端是一个低层次的API,它提供了对管理员客户端API的抽象。开发人员应该使用Curator框架,而不是直接在他们的应用程序中使用CuratorZookeeperClient
类作为最佳实践。
Curator框架(org.apache.curator.framework)是一个高层次的API,很大程度上简化了ZooKeeper的使用。 它提供的一些功能如下:
CuratorFramework
使用CuratorFrameworkFactory
进行分配。 它提供了工厂方法以及构造器创建实例。CuratorFramework
实例完全是线程安全的。在使用CuratorFramework
开发应用程序时,开发人员应该为每个ZooKeeper集群创建和共享一个CuratorFramework
实例。CuratorFramework
使用fluent风格接口。
以下展示的是ZooKeeper客户端使用CuratorFramework
的代码示例:
public void myCuratorFrameworkClient()
throws Exception
{
CuratorFramework client =
CuratorFrameworkFactory.newClient(server.getConnectString(), new RetryOneTime(1));
client.start();
try
{
String path = client.create().withMode(
CreateMode.PERSISTENT).forPath(
"/test_znode", "".getBytes());
}
finally
{
client.close();
}
}
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为ZooKeeper提供了一系列随时可用的recipe。 Curator实现的recipe的详细列表和描述可以从http://curator.apache.org/curator-recipes/index.html的项目页面中获取。
在这里,将简略地介绍一下ZooKeeper的recipe:
acquire()
调用获取所有的锁。 如果呼叫失败,所有获得的路径被释放。 release()
调用释放所有托管的锁。org.apache.zookeeper.recipes.queue.DistributedQueue
队列的一部分替代实现。Curator类库也为ZooKeeper提供了一些有用的工具。 其中一些如下所示:
BlockingQueue
的队列消费者Curator扩展包除了包含在recipe包中那些外,还包括额外的recipe。 扩展包中的recipe具有curator-x-name
的命名约定。
Curator目前提供以下扩展功能:
curator-x-zkclient-bridge
中找到。到目前为止,我们已经了解Curator类库及其各种组件。Curator为ZooKeeper API实现了一个非常好的,可靠的扩展,将ZooKeeper的许多复杂性抽象出来。 强烈建议开发人员使用Curator在Java语言的ZooKeeper开发分布式应用程序。 不仅如此,Curator的强大功能也可以从Java以外的语言编写的应用程序中使用。
15. 使用Apache Curator管理ZooKeeper
标签:删除 自己的 技术 扩展 client -name consumer mes 易用
原文地址:http://www.cnblogs.com/IcanFixIt/p/8007605.html