curator实现zookeeper的领导选举

来源:互联网 发布:仿生 知乎 编辑:程序博客网 时间:2024/06/07 07:15

通过curator来实现zookeeper的领导选举,具体看代码
public class ExampleClient extends LeaderSelectorListenerAdapter implements Closeable{

private  String name;private LeaderSelector leaderSelector;private AtomicInteger leaderCount = new AtomicInteger();public ExampleClient(CuratorFramework client,String path,String name){    this.name=name;    leaderSelector=new LeaderSelector(client, path, this);    leaderSelector.autoRequeue();}public void takeLeadership(CuratorFramework client) throws Exception{    // we are now the leader. This method should not return until we want to relinquish leadership    final int  waitSeconds = (int)(5 * Math.random()) + 1;    System.out.println(name + " is now the leader. Waiting " + waitSeconds + " seconds...");    System.out.println(name + " has been leader " + leaderCount.getAndIncrement() + " time(s) before.");    try    {        Thread.sleep(TimeUnit.SECONDS.toMillis(waitSeconds));    }    catch ( InterruptedException e )    {        System.err.println(name + " was interrupted.");        Thread.currentThread().interrupt();    }    finally    {        System.out.println(name + " relinquishing leadership.\n");    }}public void start() throws IOException{    leaderSelector.start();}public void close() throws IOException{      leaderSelector.close();}

}

程序入口
public class LeaderSelectorExample {

private static String PATH="/example/cache";private final static String zkStr="master:2181,worker1:2181,worker2:2181";private static List<CuratorFramework> clients= Lists.newArrayList();private static List<ExampleClient> examples= Lists.newArrayList();public static void main(String []args)throws Exception{  try  {      for ( int i = 0; i < 100; ++i )      {          CuratorFramework client = CuratorFrameworkFactory.newClient(zkStr, new ExponentialBackoffRetry(1000, 3));          clients.add(client);          ExampleClient  example = new ExampleClient(client, PATH, "Client #" + i);          examples.add(example);          client.start();          example.start();      }      System.out.println("Press enter/return to quit\n");      //new BufferedReader(new InputStreamReader(System.in)).readLine();  }  finally  {      System.out.println("Shutting down...");      for ( ExampleClient exampleClient : examples )      {          CloseableUtils.closeQuietly(exampleClient);      }      for ( CuratorFramework client : clients )      {          CloseableUtils.closeQuietly(client);      }  }

}
}

0 0
原创粉丝点击