<dependency> <groupId>org.apache.curator</groupId> <artifactId>curator-framework</artifactId> <version>2.11.0</version> </dependency> <dependency> <groupId>org.apache.curator</groupId> <artifactId>curator-recipes</artifactId> <version>2.11.0</version> </dependency>
public class CuratorLeaderTest { private static String ZK_URL = "192.168.1.45:2181,192.168.1.46:2181,192.168.1.41:2181"; private static final String ROOT_MASTER="/master";//根节点 public static void main(String[] args) throws InterruptedException, IOException { LeaderSelectorListener listener = new LeaderSelectorListener() { @Override public void takeLeadership(CuratorFramework client) throws Exception { System.out.println(Thread.currentThread().getName() + " 当选leader!"); //调用takeLeadership方法进行业务逻辑处理,处理完成即释放领导权,可以写个死循环 不释放 leader // while (true) { // System.out.println("状态:"+client.getState()); // Thread.sleep(3000L); // } Thread.sleep(3000L); System.out.println(Thread.currentThread().getName() + " 放弃leader!"); } @Override public void stateChanged(CuratorFramework client, ConnectionState state) { } }; CountDownLatch countDownLatch = new CountDownLatch(1); for (int i = 0; i < 10; i++) { new Thread(() -> { try { countDownLatch.await(); } catch (InterruptedException e) { e.printStackTrace(); } registerListener(listener); }).start(); } TimeUnit.MILLISECONDS.sleep(50); countDownLatch.countDown(); System.in.read(); } private static void registerListener(LeaderSelectorListener listener) { CuratorFramework client = CuratorFrameworkFactory.newClient(ZK_URL, 5000,5000, new ExponentialBackoffRetry(1000,5)); client.start(); try { new EnsurePath(ROOT_MASTER).ensure(client.getZookeeperClient()); } catch (Exception e) { e.printStackTrace(); } LeaderSelector selector = new LeaderSelector(client, ROOT_MASTER, listener); selector.autoRequeue(); selector.start(); } }