学习ZooKeeper
Curator的用户应当了解ZooKeeper。 推荐一排年文章可以学习ZooKeeper: ZooKeeper入门。
使用Curator
Curator的类库可以从Maven仓库中获取。上一篇文章已经介绍了它的相关组件。无论你使用Maven, Gradle还是 Ant都可以很容易的将curator包含到你的编译脚本中。
大部分用户都想使用curator预置的技巧(解决方案),所以你需要加上curator-recipes
依赖。如果你想包装ZOoKeeper增加连接管理重试机制等, 加上 curator-framework
依赖。
得到连接
Curator使用流式风格。 非常适合编程的一种风格, 如果你还了解它,建议先熟悉它。
Curator连接实例(CuratorFramework)由CuratorFrameworkFactory产生。对于你要连接的ZooKeeper集群, 只需一个CuratorFramework
对象即可。
1
| CuratorFrameworkFactory.newClient(zookeeperConnectionString, retryPolicy)
|
它会使用缺省值创建到zookeeper集群的连接。唯一需要设置的是指定重试策略。大部分情况你只需下面的代码:
1 2 3
| RetryPolicy retryPolicy = new ExponentialBackoffRetry(1000, 3) CuratorFramework client = CuratorFrameworkFactory.newClient(zookeeperConnectionString, retryPolicy); client.start();
|
client必须调用start
方法。 (不再使用时调用close方法)
直接调用ZooKeeper
一旦获得了CuratorFramework实例,就可以直接调用zookeeper,就像ZOoKeeper发布包中提供的原始的ZooKeeper
对象一样。
1
| client.create().forPath("/my/path", myData)
|
好处是Curator自己负责连接的管理和重试, 不必再写复杂的代码处理这个问题(如果你用ZOoKeeper自己的API, 就会理解管理连接的痛苦了)
技巧
来看Curator提供的两个技巧。
分布式的锁
1 2 3 4 5 6 7 8 9 10 11 12
| InterProcessMutex lock = new InterProcessMutex(client, lockPath); if ( lock.acquire(maxWait, waitUnit) ) { try { } finally { lock.release(); } }
|
leader选举
1 2 3 4 5 6 7 8 9 10 11 12 13
| LeaderSelectorListener listener = new LeaderSelectorListenerAdapter() { public void takeLeadership(CuratorFramework client) throws Exception { // this callback will get called when you are the leader // do whatever leader work you need to and only exit // this method when you want to relinquish leadership } } LeaderSelector selector = new LeaderSelector(client, path, listener); selector.autoRequeue(); // not required, but this is behavior that you will probably expect selector.start();
|
代码相当的简单。
原文