CuratorFramework入门指南

原文地址:https://github.com/Netflix/curator/wiki/Getting-Started

CuratorFramework作为一款优秀的ZooKeeper客户端开源工具,主要提供了对客户端到服务的连接管理和连接重试机制,以及一些扩展功能。下面是博主翻译的CuratorFramework wiki上面的文档,水平有限仅共初学者参考。

使用Curator:

� � �� Curator的jar包在Maven仓库中心是可以找到,不同的版本这里有列表:https://github.com/Netflix/curator/wiki,使用Maven,Gradle,Ant等可以很轻松简单的将Curator包含到项目当中。

� � � 很多用户会想要使用Curtor预编译的一些工具,所以Curator提供了curator-recipes,如果你仅仅想使用Zooeeper的简单包装,包括链接管理和重试机制,那么使用curator-framework就足够了。

获取一个链接:

Curator使用Fluent风格,如果在此之前你没有接触过Fluent风格,那么对你来说Curator的Code看起来会有点奇怪,因此建议你最好先熟悉一下Fluent风格。 Curator链接实例(CuratorFramework)由CuratorFrameworkFactory获取,对于一个Zk集群,仅仅需要一个CuratorFramework实例:

CuratorFrameworkFactory.newClient(zookeeperConnectionString, retryPolicy)

这将会使用默认的值创建一个到ZK集群的链接,唯一需要特别指定单参数是重试机制,从例子上看,你需要使用:

RetryPolicy retryPolicy = new ExponentialBackoffRetry(1000, 3);
CuratorFramework client = CuratorFrameworkFactory.newClient(zookeeperConnectionString, retryPolicy);
client.start();

获得到的CuratorFramework实例在使用之前需要调用其start方法,在不许要使用的时候需要调用close方法。

直接调用ZooK eepe r:

一旦你拥有了CuratorFramework实例,你可以直接调用Zookeeper,这类似ZK发布版本中提供的原生的ZooKeeper对象,

client.create().forPath("/my/path", myData)

使用Curator的好处是Curator帮助我们管理客户端到ZK的链接,并且在出现网络链接的问题的时候将会执行指定的重试机制。

Curator提供的Recipes:

1,分布式锁

InterProcessMutex lock = new InterProcessMutex(client, lockPath);
if ( lock.acquire(maxWait, waitUnit) )
{
try { // do some work inside of the critical section here } finally {
lock.release();
}
}
2,领导者选举
LeaderSelectorListener listener = new LeaderSelectorListener()
{
public void takeLeadership(CuratorFramework client) throws Exception {
//这个方法将会在当前节点处于Leader角色的时候调用
}
public void stateChanged(CuratorFramework client, ConnectionState newState){
//当到ZK的连接断开的时候会回调该方法
}
}
LeaderSelector selector = new LeaderSelector(client, path, listener);
selector.autoRequeue(); // not required, but this is behavior that you will probably expect selector.start();

Curator的使用实例:

https://github.com/Netflix/curator/tree/master/curator-examples/src/main/java

 

最新文章

  1. MainWindow、QWidget和QDialog的区别和选择(转载)
  2. webpack配置
  3. C++ compile issue
  4. [问题2014S05] 复旦高等代数II(13级)每周一题(第五教学周)
  5. php代码运行提速的20个小技巧(转)
  6. NoSQL介绍
  7. LogstashL reference 重要章节
  8. java Enum 用法示例
  9. winform中相对路径和绝对路径的获取
  10. PC--CSS命名
  11. 一 VC2008环境中ICE的配置
  12. MySQL、SQLServer2000(及SQLServer2005)和ORCALE三种数据库实现分页查询的方法
  13. Apache FtpServer 实现文件的上传和下载
  14. 201521123087 《Java程序设计》第5周学习总结
  15. nodejs建立websocket通信
  16. 在linux ubuntu下搭建深度学习/机器学习开发环境
  17. String的indexOf()用于获取字符串中某个子字符串的位置
  18. 2018~试试idea~
  19. 关于getClass()的一些自己的见解
  20. centos6.5 python命令行模式左右建无法使用

热门文章

  1. wechat4j获取用户昵称乱码修复
  2. windows批量删除ip
  3. HIVE分组排序问题
  4. HTTP协议中的COOKIE机制简单理解
  5. Matlab 日期频次统计
  6. js 图片查看器
  7. centos下搭建DNS
  8. [mybatis]Record与Example的用法
  9. cookie与session(略谈)
  10. spring mvc:内部资源视图解析器(注解实现)@Controller/@RequestMapping