示例#1
0
  public void start() throws Exception {
    m_leaderLatch =
        new LeaderLatch(
            m_client.get(),
            m_config.getMetaServerLeaderElectionZkPath(),
            m_config.getMetaServerName());

    m_leaderLatch.addListener(
        new LeaderLatchListener() {

          @Override
          public void notLeader() {
            log.info("Become follower");
            m_hasLeadership.set(false);
            m_leader.set(fetcheLeaderInfoFromZk());
            m_listenerContainer.notLeader(ClusterStateHolder.this);
          }

          @Override
          public void isLeader() {
            log.info("Become leader");
            m_hasLeadership.set(true);
            m_leader.set(fetcheLeaderInfoFromZk());
            m_listenerContainer.isLeader(ClusterStateHolder.this);
          }
        },
        Executors.newSingleThreadExecutor(
            HermesThreadFactory.create("LeaderLatchListenerPool", true)));

    // call notLeader before start, since if this is not leader, it won't trigger notLeader on start
    m_listenerContainer.notLeader(this);

    m_leaderLatch.start();
  }
 public void registerLeaderLatchListener(LeaderLatchListener... leaderListener) {
   try {
     leaderLatch.start();
     Arrays.stream(leaderListener).forEach(leaderLatch::addListener);
   } catch (Exception e) {
     throw new InternalProcessingException(e);
   }
 }
示例#3
0
  public static void main(String[] args) throws Exception {
    List<LeaderLatch> leaders = new ArrayList<LeaderLatch>();
    List<CuratorFramework> clients = new ArrayList<CuratorFramework>();

    TestingServer server = new TestingServer();

    try {
      for (int i = 0; i < 10; i++) {
        CuratorFramework client =
            CuratorFrameworkFactory.newClient(
                "192.168.50.202:2181,192.168.50.203:2181,192.168.50.204:2181",
                new ExponentialBackoffRetry(20000, 3));
        clients.add(client);

        LeaderLatch leader = new LeaderLatch(client, "/francis/leader");
        leader.addListener(
            new LeaderLatchListener() {

              @Override
              public void isLeader() {
                // TODO Auto-generated method stub
                System.out.println("I am Leader");
              }

              @Override
              public void notLeader() {
                // TODO Auto-generated method stub
                System.out.println("I am not Leader");
              }
            });

        leaders.add(leader);

        client.start();
        leader.start();
      }

      Thread.sleep(Integer.MAX_VALUE);
    } finally {

      for (CuratorFramework client : clients) {
        CloseableUtils.closeQuietly(client);
      }

      for (LeaderLatch leader : leaders) {
        CloseableUtils.closeQuietly(leader);
      }

      //            CloseableUtils.closeQuietly(server);
    }

    Thread.sleep(Integer.MAX_VALUE);
  }