1. 程式人生 > >五、curator recipes之選舉主節點Leader Latch

五、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(); } }