美文网首页
Curator框架中的Leader选举

Curator框架中的Leader选举

作者: 爪哇驿站 | 来源:发表于2021-01-12 18:24 被阅读0次
    一、引入jar包
    <!--引入zk依赖-->
    <dependency>
        <groupId>org.apache.zookeeper</groupId>
        <artifactId>zookeeper</artifactId>
        <version>3.6.1</version>
        <!--排除这个slf4j-log4j12-->
        <exclusions>
            <exclusion>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-log4j12</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <!--引入curator依赖-->
    <dependency>
        <groupId>org.apache.curator</groupId>
        <artifactId>curator-client</artifactId>
        <version>4.2.0</version>
    </dependency>
    <dependency>
        <groupId>org.apache.curator</groupId>
        <artifactId>curator-framework</artifactId>
        <version>4.2.0</version>
    </dependency>
    <dependency>
        <groupId>org.apache.curator</groupId>
        <artifactId>curator-recipes</artifactId>
        <version>4.2.0</version>
    </dependency>
    
    二、使用示例
    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;
    
    import java.io.IOException;
    
    public class LeaderLatchTest {
        private static final String PATH = "/leader";
        private static final String APP_ID = "001";
    
        public static void main(String[] args) throws IOException {
            CuratorFramework client = CuratorFrameworkFactory.newClient("127.0.0.1:2181", new ExponentialBackoffRetry(1000, 3));
            client.start();
            LeaderLatch leaderLatch = new LeaderLatch(client, PATH, APP_ID);
            leaderLatch.addListener(new LeaderLatchListener() {
                /**
                 * isLeader 中的方法会在实例被选为主节点后被执行, 而notLeader中的不会被执行
                 * 如果主节点被失效, 会进行重新选主
                 */
                @Override
                public void isLeader() {
                    System.out.println("======= [LeaderLatch]我是主节点, app_id={" + leaderLatch.getId() + "} =========");
                }
    
                /**
                 * 当丢失leader的时候被执行
                 */
                @Override
                public void notLeader() {
                    System.out.println("======= [LeaderLatch]我不是主节点, app_id={" + leaderLatch.getId() + "} =========");
                }
            });
    
    
            try {
                leaderLatch.start();
                while (true) {
                    Thread.sleep(10000);
                    System.out.println("======= " + leaderLatch.getLeader() + " ==========");
                }
            } catch (Exception e) {
                e.printStackTrace();
                leaderLatch.close();
                client.close();
            }
        }
    
    }
    

    温馨提示:在idea中更改APP_ID,开启多个main并行执行,即可模拟集群选举效果。

    image.png

    相关文章

      网友评论

          本文标题:Curator框架中的Leader选举

          本文链接:https://www.haomeiwen.com/subject/bvkpaktx.html