curator实现zookeeper的领导选举

通过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);
      }
  }

}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值