
简介
在分布式计算中,主节点选举是为了把某个进程作为主节点来控制其它节点的过程。在选举结束之前,我们不知道哪个节点会成为主节点。curator对于主节点选举有两种实现方式,本文示例演示Latch的实现示例。
官方文档:http://curator.apache.org/curator-recipes/leader-latch.html
javaDoc:http://curator.apache.org/apidocs/org/apache/curator/framework/recipes/leader/LeaderLatch.html
代码示例
zookeeper的选举是通过争抢最小节点来实现的,这里添加了争抢结果的监听,如果当前节点编程主节点则触发isLeader,如果当前节点从主节点变成非主节点则触发notLeader
import org.apache.curator.framework.CuratorFramework;
import org.apache.curator.framework.CuratorFrameworkFactory;
import org.apache.curator.framework.recipes.leader.LeaderLatch;
import org.apache.curator.framework.recipes.leader.LeaderLatchListener;
import org.apache.curator.retry.ExponentialBackoffRetry; public class LatchDemo {
private static CuratorFramework client = CuratorFrameworkFactory.newClient("localhost:2181", new ExponentialBackoffRetry(3000, 3));
private static String path = "/master";
private static String id = "0001"; public static void main(String[] args) throws Exception {
// curator客户端启动
client.start();
// 创建选举实例
LeaderLatch latch = new LeaderLatch(client, path, id);
// 添加选举监听
latch.addListener(new LeaderLatchListener() {
@Override
public void isLeader() {
// 如果成为master则触发
System.out.println("is leader");
} @Override
public void notLeader() {
// 如果从主节点变成非主节点则触发
System.out.println("not leader");
}
});
// 加入选举
latch.start();
// curator客户端关闭
client.close();
}
}
主节点选举出了Curator客户端需要star以外,latch也需要start,当然latch也会配对着一个close。start意味着参加选举,close意味着退出选举。