博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
八、curator recipes之选举主节点LeaderSelector
阅读量:6468 次
发布时间:2019-06-23

本文共 2605 字,大约阅读时间需要 8 分钟。

简介

前面我们看到LeaderLatch对于选举的实现:

节点在加入选举以后,除非程序结束或者close()退出选举,否则加点自加入选举以后将持续持有或者保持对主节点的竞争。

recipes的另外一个实现Leader Election则不同,被选为主节点的节点任务如果执行完就会放弃主节点,然后由剩下的节点进行主节点竞争。如果你希望已经执行完的主节点再次加入主节点选举那么你需要调用autoRequeue()方法去自动加入。

官方文档:

javaDoc:

代码示例

以下代码你可以通过是否调用autoRequeue来看看console的输出有什么不同

import org.apache.curator.framework.CuratorFramework;import org.apache.curator.framework.CuratorFrameworkFactory;import org.apache.curator.framework.recipes.leader.LeaderSelector;import org.apache.curator.framework.recipes.leader.LeaderSelectorListener;import org.apache.curator.framework.state.ConnectionState;import org.apache.curator.retry.ExponentialBackoffRetry;public class LeaderElectionDemo {    private static CuratorFramework client = CuratorFrameworkFactory.newClient("localhost:2181", new ExponentialBackoffRetry(3000, 3));    private static String path = "/mutex/path/0001";    static {        client.start();    }    public static void main(String[] args) throws InterruptedException {        startThread0();        Thread.sleep(10);        startThread1();        Thread.sleep(50000);        client.close();    }    public static void startThread0() {        new Thread(() -> {            LeaderSelector selector = new LeaderSelector(client, path, new LeaderSelectorListener() {                @Override                public void takeLeadership(CuratorFramework curatorFramework) throws Exception {                    System.out.println("thread0 is leader");                }                @Override                public void stateChanged(CuratorFramework curatorFramework, ConnectionState connectionState) {                    System.out.println("thread0 state changed,state is " + connectionState.isConnected());                }            });            selector.autoRequeue();            selector.start();        }).start();    }    public static void startThread1() {        new Thread(() -> {            LeaderSelector selector = new LeaderSelector(client, path, new LeaderSelectorListener() {                @Override                public void takeLeadership(CuratorFramework curatorFramework) throws Exception {                    System.out.println("thread1 is leader");                }                @Override                public void stateChanged(CuratorFramework curatorFramework, ConnectionState connectionState) {                    System.out.println("thread1 state changed,state is " + connectionState.isConnected());                }            });            selector.autoRequeue();            selector.start();        }).start();    }}

 

转载于:https://www.cnblogs.com/lay2017/p/10274872.html

你可能感兴趣的文章
Android AsyncTask讲解
查看>>
swift-24xcode8内存分配图
查看>>
webpack 打包优化
查看>>
Android RxJava:基础介绍与使用
查看>>
用这四种套路更新缓存,你会少走很多弯路!
查看>>
[深圳] shopee 前端、后台、测试、安卓、产品经理、UI/UX 内推啦!
查看>>
和快手抖音类似的短视频直播APP,仿v聊富聊花间一对一直播收费APP
查看>>
重温操作系统——“共享”CPU
查看>>
vue双向数据绑定原理
查看>>
这几道Redis面试题都不懂,怎么拿offer?
查看>>
SAX解析XML文档
查看>>
带你真正的了解加密和Hash
查看>>
vue的另一个内置组件keep-alive
查看>>
【本人秃顶程序员】在Java中使用函数范式提高代码质量
查看>>
如何在ReactJS中使用FastReport Core Web Report
查看>>
项目重构之缓存篇
查看>>
教你程序员的年终报告怎么写
查看>>
这就是我的研究生生活
查看>>
Meteor 项目完整 Demo ,涉及到大部分知识。 一款 Meteor 的 入门 Web App ,GitHub 开源。...
查看>>
反爬虫系列-JS参数篇
查看>>