五、curator recipes之選舉主節點Leader Latch


簡介

在分布式計算中,主節點選舉是為了把某個進程作為主節點來控制其它節點的過程。在選舉結束之前,我們不知道哪個節點會成為主節點。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意味着退出選舉。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM