Apache Curator Leader选举 简单示例
来源:互联网 发布:在线网络投资靠谱吗 编辑:程序博客网 时间:2024/06/05 04:47
版本依赖:
<dependency><groupId>org.apache.curator</groupId><artifactId>curator-recipes</artifactId><version>2.10.0</version></dependency>
示例一:
package com.zk.leader;import java.util.ArrayList;import java.util.List;import java.util.concurrent.TimeUnit;import org.apache.curator.framework.CuratorFramework;import org.apache.curator.framework.CuratorFrameworkFactory;import org.apache.curator.framework.recipes.leader.LeaderLatch;import org.apache.curator.retry.ExponentialBackoffRetry;/** * 必须启动LeaderLatch: leaderLatch.start(); * 一旦启动, LeaderLatch会和其它使用相同latch path的其它LeaderLatch交涉,然后随机的选择其中一个作为leader。 * 你可以随时查看一个给定的实例是否是leader: */public class Example1{private static final String PATH = "/leader";private static final int COUNT = 5;public static void main(String[] args) throws Exception{CuratorFramework client = CuratorFrameworkFactory.newClient("192.168.1.100:2181", new ExponentialBackoffRetry(1000, 3));client.start();List<LeaderLatch> list = new ArrayList<>();for (int i = 1; i <= COUNT; i++){LeaderLatch example = new LeaderLatch(client, PATH, "Client #" + i);example.start();list.add(example);}TimeUnit.SECONDS.sleep(2);LeaderLatch leader = null;for (LeaderLatch ll : list){if (ll.hasLeadership()){leader = ll;}System.out.println(ll.getId() + "\t" + ll.hasLeadership());};TimeUnit.SECONDS.sleep(2);list.remove(leader);leader.close();TimeUnit.SECONDS.sleep(2);System.out.println("========================");for (LeaderLatch ll : list){System.out.println(ll.getId() + "\t" + ll.hasLeadership());}for (LeaderLatch ll : list){ll.close();}client.close();}}输出如下:
Client #1falseClient #2falseClient #3trueClient #4falseClient #5false========================Client #1falseClient #2falseClient #4falseClient #5true
示例二:
package com.zk.leader;import java.util.ArrayList;import java.util.List;import java.util.concurrent.TimeUnit;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.LeaderSelectorListenerAdapter;import org.apache.curator.retry.ExponentialBackoffRetry;/** * 与LeaderLatch相比, 通过LeaderSelectorListener可以对领导权进行控制, 在适当的时候释放领导权,这样每个节点都有可能获得领导权。 * 而LeaderLatch一根筋到死, 除非调用close方法,否则它不会释放领导权。 */public class Example2{private static final String PATH = "/leader";private static final int COUNT = 5;public static void main(String[] args) throws Exception{CuratorFramework client = CuratorFrameworkFactory.newClient("192.168.1.100:2181", new ExponentialBackoffRetry(1000, 3));client.start();List<MyLeaderSelectorListenerAdapter> list = new ArrayList<>();for (int i = 1; i <= COUNT; i++){MyLeaderSelectorListenerAdapter example = new MyLeaderSelectorListenerAdapter(client, PATH, "Client #" + i);list.add(example);}TimeUnit.SECONDS.sleep(20);for (MyLeaderSelectorListenerAdapter listener : list){listener.close();}client.close();}}class MyLeaderSelectorListenerAdapter extends LeaderSelectorListenerAdapter{private final String name; private final LeaderSelector leaderSelector; public MyLeaderSelectorListenerAdapter(CuratorFramework client, String path, String name) { this.name = name; leaderSelector = new LeaderSelector(client, path, this); //保证在此实例释放领导权之后还可能获得领导权。 leaderSelector.autoRequeue(); leaderSelector.start(); } public void close() { leaderSelector.close(); } /** * 你可以在takeLeadership进行任务的分配等等,并且不要返回,如果你想要要此实例一直是leader的话可以加一个死循环。 * 一旦此方法执行完毕之后,就会重新选举 */public void takeLeadership(CuratorFramework client) throws Exception{System.out.println(name + " 当选为leader");TimeUnit.SECONDS.sleep(2);}}
输出如下:
Client #1 当选为leaderClient #4 当选为leaderClient #2 当选为leaderClient #3 当选为leaderClient #5 当选为leaderClient #1 当选为leaderClient #4 当选为leaderClient #2 当选为leaderClient #3 当选为leaderClient #5 当选为leader
以上是使用curator实现leader的两种方法
0 0
- Apache Curator Leader选举 简单示例
- Curator之Leader选举
- Apache Curator Leader Election
- Apache Curator Lock 简单示例
- Curator之Master/Leader选举注意事项
- zookeeper——leader选举(curator)
- Apache Curator“菜谱”下的高级特性:分布式锁与Leader选举
- 【Zookeeper】Leader选举机制示例
- Zookeeper开源客户端Curator之Master/Leader选举
- Zookeeper系列(十四)Zookeeper开源客户端之Curator的Master/Leader选举
- 【Zookeeper】Leader选举机制示例(异步API)
- 使用curator进行选举
- curator实现master选举
- zookeeper LeaderElection(leader 选举)
- zookeeper leader选举
- Zookeeper-Zookeeper leader选举
- Zookeeper -- leader选举
- Zookeeper-Zookeeper leader选举
- UNITY3D自学(五)-- 导航寻路的学习
- java static关键字用法
- Fresco源码赏析之后台获取流程
- iOS开发之JS与OC的混合开发
- Map中有序存储
- Apache Curator Leader选举 简单示例
- 只让部分页面可以模屏
- Android 代码混淆
- mysql通过ip地址无法连接
- 在Dubbo中开发REST风格的远程调用(RESTful Remoting)
- Block属性声明strong和retain竟然不一样
- Druid连接池简介和配置
- Xcode --自动注释插件VVDocumenter-Xcode(安装须知)
- 用户身份切换-su sudo