简介
在分布式系统中,常见的主从模式下,我们希望一个主节点来控制其它从节点。而哪一台机器成为主节点需要进行选举,curator为我们实现了选举:leader 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(); } }