zookeeper获取所有节点——基于curator框架
来源:互联网 发布:舟山公务员网络学堂 编辑:程序博客网 时间:2024/06/05 02:46
zookeeper获取所有节点——基于curator框架
本文主要介绍基于curator框架访问zookeeper所有节点。
本文主要参考:
https://github.com/Netflix/curator
http://curator.apache.org/
好,下面上货。
1、首先创建一个maven工程
mvn archetype:generate -DarchetypeCatalog=internal
2、添加依赖:
<!-- https://mvnrepository.com/artifact/org.apache.curator/curator-framework --> <dependency> <groupId>org.apache.curator</groupId> <artifactId>curator-framework</artifactId> <version>4.0.0</version> <exclusions> <exclusion> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> <version>3.4.10</version> </dependency>
3、看一下工程结构:
4、zkUtils中的内容:
CreateClient.java
package com.xueyou.zkdemo.zkUtils;import org.apache.curator.RetryPolicy;import org.apache.curator.framework.CuratorFramework;import org.apache.curator.framework.CuratorFrameworkFactory;import org.apache.curator.retry.ExponentialBackoffRetry;public class CreateClient { public static CuratorFramework createSimple(String connectionString) { // these are reasonable arguments for the ExponentialBackoffRetry. The first // retry will wait 1 second - the second will wait up to 2 seconds - the // third will wait up to 4 seconds. ExponentialBackoffRetry retryPolicy = new ExponentialBackoffRetry(1000, 3); // The simplest way to get a CuratorFramework instance. This will use default values. // The only required arguments are the connection string and the retry policy return CuratorFrameworkFactory.newClient(connectionString, retryPolicy); } public static CuratorFramework createWithOptions(String connectionString, RetryPolicy retryPolicy, int connectionTimeoutMs, int sessionTimeoutMs) { // using the CuratorFrameworkFactory.builder() gives fine grained control // over creation options. See the CuratorFrameworkFactory.Builder javadoc // details return CuratorFrameworkFactory.builder() .connectString(connectionString) .retryPolicy(retryPolicy) .connectionTimeoutMs(connectionTimeoutMs) .sessionTimeoutMs(sessionTimeoutMs) // etc. etc. .build(); }}
CuratorZkClientBridge.java
package com.xueyou.zkdemo.zkUtils;import org.apache.curator.framework.CuratorFramework;import org.apache.curator.framework.api.BackgroundCallback;import org.apache.curator.framework.api.CuratorEvent;import org.apache.curator.framework.api.CuratorListener;import org.apache.zookeeper.CreateMode;import org.apache.zookeeper.KeeperException;import org.apache.zookeeper.WatchedEvent;import org.apache.zookeeper.Watcher;import org.apache.zookeeper.ZooKeeper;import org.apache.zookeeper.data.Stat;import java.util.List;import java.util.concurrent.atomic.AtomicReference;public class CuratorZkClientBridge { private final CuratorFramework curator; private final AtomicReference<CuratorListener> listener = new AtomicReference<CuratorListener>(null); /** * @param curator Curator instance to bridge */ public CuratorZkClientBridge(CuratorFramework curator) { this.curator = curator; } /** * Return the client * * @return client */ public CuratorFramework getCurator() { return curator; } public void connect(final Watcher watcher) { if ( watcher != null ) { CuratorListener localListener = new CuratorListener() { public void eventReceived(CuratorFramework client, CuratorEvent event) throws Exception { if ( event.getWatchedEvent() != null ) { watcher.process(event.getWatchedEvent()); } } }; curator.getCuratorListenable().addListener(localListener); listener.set(localListener); try { BackgroundCallback callback = new BackgroundCallback() { public void processResult(CuratorFramework client, CuratorEvent event) throws Exception { WatchedEvent fakeEvent = new WatchedEvent(Watcher.Event.EventType.None, curator.getZookeeperClient().isConnected() ? Watcher.Event.KeeperState.SyncConnected : Watcher.Event.KeeperState.Disconnected, null); watcher.process(fakeEvent); } }; curator.checkExists().inBackground(callback).forPath("/foo"); } catch ( Exception e ) { throw new RuntimeException(e); } } } public void close() throws InterruptedException { // NOTE: the curator instance is NOT closed here CuratorListener localListener = listener.getAndSet(null); if ( localListener != null ) { curator.getCuratorListenable().removeListener(localListener); } } public String create(String path, byte[] data, CreateMode mode) throws KeeperException, InterruptedException { try { return curator.create().withMode(mode).forPath(path, data); } catch ( Exception e ) { adjustException(e); } return null; // will never execute } public void delete(String path) throws InterruptedException, KeeperException { try { curator.delete().forPath(path); } catch ( Exception e ) { adjustException(e); } } public boolean exists(String path, boolean watch) throws KeeperException, InterruptedException { try { return watch ? (curator.checkExists().watched().forPath(path) != null) : (curator.checkExists().forPath(path) != null); } catch ( Exception e ) { adjustException(e); } return false; // will never execute } public List<String> getChildren(String path, boolean watch) throws KeeperException, InterruptedException { try { return watch ? curator.getChildren().watched().forPath(path) : curator.getChildren().forPath(path); } catch ( Exception e ) { adjustException(e); } return null; // will never execute } public byte[] readData(String path, Stat stat, boolean watch) throws KeeperException, InterruptedException { try { if ( stat != null ) { return watch ? curator.getData().storingStatIn(stat).watched().forPath(path) : curator.getData().storingStatIn(stat).forPath(path); } else { return watch ? curator.getData().watched().forPath(path) : curator.getData().forPath(path); } } catch ( Exception e ) { adjustException(e); } return null; // will never execute } public void writeData(String path, byte[] data, int expectedVersion) throws KeeperException, InterruptedException { writeDataReturnStat(path, data, expectedVersion); } public Stat writeDataReturnStat(String path, byte[] data, int expectedVersion) throws KeeperException, InterruptedException { try { curator.setData().withVersion(expectedVersion).forPath(path, data); } catch ( Exception e ) { adjustException(e); } return null; // will never execute } public ZooKeeper.States getZookeeperState() { try { return curator.getZookeeperClient().getZooKeeper().getState(); } catch ( Exception e ) { throw new RuntimeException(e); } } public long getCreateTime(String path) throws KeeperException, InterruptedException { try { Stat stat = curator.checkExists().forPath(path); return (stat != null) ? stat.getCtime() : 0; } catch ( Exception e ) { adjustException(e); } return 0; } public String getServers() { return curator.getZookeeperClient().getCurrentConnectionString(); } private void adjustException(Exception e) throws KeeperException, InterruptedException { if ( e instanceof KeeperException ) { throw (KeeperException)e; } if ( e instanceof InterruptedException ) { throw (InterruptedException)e; } throw new RuntimeException(e); }}
5、例子程序,遍历zookeeper所有节点。
package com.xueyou.zkdemo;import com.xueyou.zkdemo.zkUtils.CreateClient;import com.xueyou.zkdemo.zkUtils.CuratorZkClientBridge;import org.apache.curator.framework.CuratorFramework;import org.apache.zookeeper.KeeperException;import java.util.ArrayList;import java.util.List;/** * Hello world! */public class App { public static String connectionString = "192.168.0.99:2181,192.168.0.99:2182,192.168.0.99:2183"; public static List<String> res = new ArrayList<>(); public static void main(String[] args) { System.out.println("Hello World!"); CuratorFramework curatorFramework = CreateClient.createSimple(connectionString); curatorFramework.start(); //doSomething to zookeeper CuratorZkClientBridge curatorZkClientBridge = new CuratorZkClientBridge(curatorFramework); System.out.println(getNode(curatorZkClientBridge, "/")); curatorFramework.close(); } public static List<String> getNode(CuratorZkClientBridge curatorZkClientBridge, String parentNode) { try { List<String> tmpList = curatorZkClientBridge.getChildren(parentNode, false); for (String tmp : tmpList) { String childNode = parentNode.equals("/") ? parentNode + tmp : parentNode + "/" + tmp; res.add(childNode); getNode(curatorZkClientBridge, childNode); } return res; } catch (KeeperException e) { e.printStackTrace(); return null; } catch (InterruptedException e) { e.printStackTrace(); return null; } }}
6、运行结果:
阅读全文
0 0
- zookeeper获取所有节点——基于curator框架
- Zookeeper ---- Curator 框架应用
- zookeeper Curator框架 API
- ZooKeeper的:Curator框架应用
- ZooKeeper的:Curator框架应用
- zookeeper客户端操作框架curator
- zookeeper Curator框架简单使用
- zookeeper curator获取唯一序列
- zookeeper——leader选举(curator)
- Zookeeper实例Curator API-使用Curator创建节点
- Zookeeper实例Curator API-使用Curator删除节点
- zookeeper curator 对节点变化监控
- curator对Zookeeper节点监听总结
- Zookeeper——4、使用Curator操作Zookeeper
- Zookeeper实例Curator API-使用Curator获取数据内容
- Zookeeper开源客户端框架Curator简介
- Zookeeper开源客户端框架Curator简介
- Zookeeper开源客户端框架Curator简介
- 内存溢出OOM常见类型
- 2017年省赛总结纪念
- windows删除node_modules
- HDU_1402_A * B Problem Plus
- 用python批量删除含有相同字符的文件
- zookeeper获取所有节点——基于curator框架
- [2017-09-04]Abp系列——为什么值对象必须设计成不可变的
- push统计工具开发小结
- 关于使用struts2跳转后css和js失效的解决方式
- 【Java面试】---面向对象技术
- 数据库——数据库练习题
- BufferedWriter和BufferedReader
- c3p0配置文件出错:实体之间要使用;隔开,而在xml文件中,分号用&代替
- 1045. 快速排序(25)