public static void main(String[] args) {
//初始化log4j,zookeeper否则报错。
//org.apache.log4j.BasicConfigurator.configure();
try {
Main app = new Main();
app.zk();
} catch (Exception e) {
e.printStackTrace();
}
}
private void zk() throws Exception {
String path = "/path/leader";
List clients = new ArrayList<>();
List leaderSelectors = new ArrayList<>();
for (int i = 0; i < COUNT; i++) {
CuratorFramework client = makeClient();
client.start();
clients.add(client);
//检测是否存在该路径。
Stat stat = client.checkExists().forPath(path);
//如果不存在这个路径,stat为null,创建新的节点路径。
if (stat == null) {
String s = client.create()
.creatingParentsIfNeeded()
.withMode(CreateMode.PERSISTENT)
.forPath(path);
System.out.println(TAG + "创建-" + s);
} else {
System.out.println(TAG + "已存在:" + path + ",不需重复创建");
}
String leaderId = "#" + i;
//不再使用LeaderSelector时,应该调用它的close方法。
LeaderSelector leaderSelector = new LeaderSelector(client, path, new LeaderSelectorListener() {
@Override
public void takeLeadership(CuratorFramework c) throws Exception {
//打印成为leader的信息。
info(leaderSelectors);
}
@Override
public void stateChanged(CuratorFramework client, ConnectionState newState) {
String s = newState.isConnected() ? "连接" : "断连";
System.out.println(TAG + s);
}
});
leaderSelector.setId(leaderId);
leaderSelectors.add(leaderSelector);
//启动竞选leader
leaderSelector.autoRequeue();
leaderSelector.start();
}
TimeUnit.SECONDS.sleep(3);
}
private void info(List leaderSelectors) {
for (LeaderSelector l : leaderSelectors) {
if (l.hasLeadership()) {
System.out.println(TAG + "现任Leader:" + l.getId()+"@"+System.currentTimeMillis());
}
}
}
private CuratorFramework makeClient() {
RetryPolicy retryPolicy = new ExponentialBackoffRetry(1000, 5);
CuratorFramework client = CuratorFrameworkFactory.builder()
.connectString(getAddress())
.sessionTimeoutMs(10 * 1000)
.connectionTimeoutMs(20 * 1000)
.retryPolicy(retryPolicy)
.build();
return client;
}
private String getAddress() {
String ip = "127.0.0.1";
return ip + ":2181," + ip + ":2182," + ip + ":2183";
}
}
这里我就分享一份资料,希望可以帮助到大家提升进阶。
内容包含:Android学习PDF+架构视频+面试文档+源码笔记,高级架构技术进阶脑图、Android开发面试专题资料,高级进阶架构资料 这几块的内容。分享给大家,非常适合近期有面试和想在技术道路上继续精进的朋友。
如果你有需要的话,可以点击Android学习PDF+架构视频+面试文档+源码笔记获取免费领取方式
喜欢本文的话,不妨给我点个小赞、评论区留言或者转发支持一下呗~