五、curator recipes之选举主节点Leader Latch

简介

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

猜你喜欢

转载自www.cnblogs.com/lay2017/p/10264300.html