http:///2014/12/12/zookeeper-recipes-by-example-1/ ZooKeeper官方给出了使用zookeeper的几种用途。
在实际使用ZooKeeper开发中,我们最常用的是Apache Curator。 它由Netflix公司贡献给Apache,目前版本2.7.0。
由于内容较多, 将会分成多篇文章进行介绍。具体的章节如上面所示。 除了ZK 的”Two-phased Commit”的recipe外, Curator提供了全部的ZK的recipe, 而且分类更详细。 这篇文章将会以实例的方式介绍这些Recipe。 一旦你领会了这些Recipe,就可以在项目中很好的使用ZooKeeper的强大威力。 leader选举在分布式计算中, leader election是很重要的一个功能, 这个选举过程是这样子的: 指派一个进程作为组织者,将任务分发给各节点。 在任务开始前, 哪个节点都不知道谁是leader或者coordinator. 当选举算法开始执行后, 每个节点最终会得到一个唯一的节点作为任务leader. Curator 有两种选举recipe, 你可以根据你的需求选择合适的。 Leader latch首先我们看一个使用
必须启动LeaderLatch:
类似JDK的CountDownLatch, LeaderLatch在请求成为leadership时有block方法:
一旦不使用LeaderLatch了,必须调用 异常处理 下面看例子:
首先我们创建了10个LeaderLatch,启动后它们中的一个会被选举为leader。 因为选举会花费一些时间,start后并不能马上就得到leader。 Leader ElectionCurator还提供了另外一种选举方法。
重要的是LeaderSelector类,它的构造函数为:
类似LeaderLatch,必须 异常处理 重要: 推荐处理方式是当收到SUSPENDED 或 LOST时抛出CancelLeadershipException异常. 这会导致LeaderSelector实例中断并取消执行takeLeadership方法的异常. 这非常重要, 你必须考虑扩展LeaderSelectorListenerAdapter. LeaderSelectorListenerAdapter提供了推荐的处理逻辑。 这个例子摘自官方。
你可以在takeLeadership进行任务的分配等等,并且不要返回,如果你想要要此实例一直是leader的话可以加一个死循环。 测试代码:
与LeaderLatch, 通过 |
|
来自: 我心永恒lz > 《ZooKeeper》