zookeeper客户端工具类
来源:互联网 发布:淘宝运营vip课程 云盘 编辑:程序博客网 时间:2024/06/05 01:52
pom.xml
<properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <java.version>1.8</java.version> <zookeeper.version>3.4.5</zookeeper.version> <curator.version>2.12.0</curator.version> </properties> <dependencies> <dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> <version>${zookeeper.version}</version> </dependency> <dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <version>11.0.2</version> </dependency> <!-- zk客户端第三方Curator --> <dependency> <groupId>org.apache.curator</groupId> <artifactId>curator-client</artifactId> <version>${curator.version}</version> </dependency> <dependency> <groupId>org.apache.curator</groupId> <artifactId>curator-framework</artifactId> <version>${curator.version}</version> </dependency> <dependency> <groupId>org.apache.curator</groupId> <artifactId>curator-recipes</artifactId> <version>${curator.version}</version> </dependency> </dependencies>
1、 zookeeper原生客户端
ZookeeperUtils .java
package com.syher.utils;import com.google.common.base.Charsets;import com.google.common.base.Joiner;import com.google.common.base.Preconditions;import org.apache.zookeeper.*;import org.apache.zookeeper.data.Stat;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import java.nio.charset.Charset;public class ZookeeperUtils { private final static Logger logger = LoggerFactory.getLogger(ZookeeperUtils.class); private final static Integer DEFAULT_SESSION_TIMEOUT = 10000; private final static boolean DEFAULT_WATCHER_ABLE = true; private final static Charset DEFAULT_CHARSET = Charsets.UTF_8; private ZooKeeper zooKeeper; private String zkHosts; private String basePath; private Watcher watcher; private ThreadLocal<Transaction> transactionThreadLocal = new ThreadLocal<>(); public ZookeeperUtils(String zkHosts, String basePath) { this(zkHosts, basePath, watchedEvent -> { // TODO: 事件触发 }); } public ZookeeperUtils(String zkHosts, String basePath, Watcher watcher) { this.zkHosts = zkHosts; this.basePath = basePath; this.watcher = watcher; } public void begin() { transactionThreadLocal.set(zooKeeper.transaction()); } public String getBasePath() { return this.basePath; } public void connect() { try { zooKeeper = new ZooKeeper(zkHosts, DEFAULT_SESSION_TIMEOUT, this.watcher); } catch (Exception e) { logger.info("cannot connect to zookeeper.", e); } } public void commit() throws Exception { Transaction transaction = transactionThreadLocal.get(); if (transaction != null) { transaction.commit(); transaction = null; transactionThreadLocal.remove(); } } public void create(String zNode, String content) throws Exception { create(zNode, content.getBytes(DEFAULT_CHARSET)); } public void create(String zNode, byte[] bytes) throws Exception { zNode = this.formatZnode(zNode); Transaction transaction = transactionThreadLocal.get(); Preconditions.checkArgument(transaction != null, "transcation must be required."); Stat stat = zooKeeper.exists(zNode, DEFAULT_WATCHER_ABLE); if (stat == null) { createNodeLoop(zNode); stat = zooKeeper.exists(zNode, DEFAULT_WATCHER_ABLE); } transaction.setData(zNode, bytes, stat.getVersion()); } public String get(String zNode) throws Exception { zNode = formatZnode(zNode); Stat stat = zooKeeper.exists(zNode, DEFAULT_WATCHER_ABLE); if (stat != null) return new String(zooKeeper.getData(zNode, DEFAULT_WATCHER_ABLE, stat), DEFAULT_CHARSET); return null; } public String delete(String zNode) throws Exception { zNode = formatZnode(zNode); Stat stat = zooKeeper.exists(zNode, DEFAULT_WATCHER_ABLE); if (stat != null) { Transaction transaction = transactionThreadLocal.get(); Preconditions.checkArgument(transaction != null, "transaction must be required."); transaction.delete(zNode, stat.getVersion()); } return zNode; } private String formatZnode(String zNode) { zNode = zNode.startsWith("/") ? zNode : String.format("/%s", zNode); return zNode.replaceAll("[/]{2,}", "/"); } private void createNodeLoop(String zNode) throws Exception { if (zNode ==null || zNode.isEmpty()) return; zNode = formatZnode(zNode); int index = zNode.lastIndexOf("/"); if (index != 0 && !zNode.isEmpty()) { createNodeLoop(zNode.substring(0, index)); } Stat stat = zooKeeper.exists(zNode, DEFAULT_WATCHER_ABLE); if (stat == null) { zooKeeper.create(zNode, new byte[0], ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT); } } public String buildPath(String ...paths) { StringBuilder stringBuilder = new StringBuilder(256); stringBuilder.append(this.basePath); String path ; if (paths != null && paths.length != 0) { stringBuilder.append("/"); path = Joiner.on("/").appendTo(stringBuilder, paths).toString(); } else { path = stringBuilder.toString(); } return formatZnode(path); }}
2、 第三方客户端Curator
ZkCuratorUtil.java
package com.syher.utils;import com.google.common.base.Charsets;import com.google.common.base.Joiner;import com.google.common.base.Strings;import com.google.common.collect.Maps;import org.apache.curator.framework.CuratorFramework;import org.apache.curator.framework.CuratorFrameworkFactory;import org.apache.curator.framework.recipes.cache.TreeCache;import org.apache.curator.framework.recipes.cache.TreeCacheListener;import org.apache.curator.retry.ExponentialBackoffRetry;import org.apache.zookeeper.CreateMode;import org.apache.zookeeper.data.Stat;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import java.nio.charset.Charset;import java.util.List;import java.util.Map;public class ZkCuratorUtil { private final Logger logger = LoggerFactory.getLogger(ZkCuratorUtil.class); private final static Integer DEFAULT_SESSION_TIMEOUT = 300000; private final static Integer DEFAULT_CONNECT_TIMEOUT = 150000; private final static Integer DEFAULT_BASE_SLEEP_TIME = 1000; private final static Integer DEFAULT_MAX_RETRY = 5; private final static Charset charset = Charsets.UTF_8; private String zkHosts; private String basePath; private Integer connectTimeout; private Integer sessionTimeout; private Integer maxRetry; private CuratorFramework client; private final Map<String, TreeCache> treeCaches = Maps.newHashMap(); public ZkCuratorUtil(String zkHosts, String basePath) { this(zkHosts, basePath, DEFAULT_CONNECT_TIMEOUT); } public ZkCuratorUtil(String zkHosts, String basePath, Integer connectTimeout) { this(zkHosts, basePath, connectTimeout, DEFAULT_SESSION_TIMEOUT); } public ZkCuratorUtil(String zkHosts, String basePath, Integer connectTimeout, Integer sessionTimeout) { this(zkHosts, basePath, connectTimeout, sessionTimeout, DEFAULT_MAX_RETRY); } public ZkCuratorUtil(String zkHosts, String basePath, Integer connectTimeout, Integer sessionTimeout, Integer maxRetry) { this.zkHosts = zkHosts; this.basePath = basePath; this.connectTimeout = connectTimeout; this.sessionTimeout = sessionTimeout; this.maxRetry = maxRetry; } public CuratorFramework connect() { client = CuratorFrameworkFactory.builder() .connectString(zkHosts) .retryPolicy(new ExponentialBackoffRetry(DEFAULT_BASE_SLEEP_TIME, this.maxRetry)) .sessionTimeoutMs(this.sessionTimeout) .connectionTimeoutMs(this.connectTimeout) .namespace(basePath) .build(); return client; } public CuratorFramework getClient() { return client == null ? connect() : client; } public void addListener(String node, TreeCacheListener listener) throws Exception { if(treeCaches.containsKey(node)) return; node = fixed(node); TreeCache treeCache = new TreeCache(this.client, node); treeCache.getListenable().addListener(listener); treeCache.start(); treeCaches.put(node, treeCache); } public CuratorFramework start() { if (client == null) client = connect(); if (!client.isStarted()) client.start(); return client; } public Stat checkExists(String nodePath) throws Exception { return client.checkExists().forPath(nodePath); } public String send(String nodePath, String content) throws Exception { return send(nodePath, Strings.nullToEmpty(content).getBytes(charset)); } public String send(String nodePath, byte[] bytes) throws Exception { nodePath = fixed(nodePath); Stat stat = checkExists(nodePath); if (stat == null) { client.create().creatingParentContainersIfNeeded() .withMode(CreateMode.PERSISTENT) .forPath(nodePath, bytes); } else { client.setData().forPath(nodePath, bytes); } return nodePath; } public String get(String nodePath) throws Exception { nodePath = fixed(nodePath); Stat stat = checkExists(nodePath); if (stat != null) { byte[] bytes = client.getData().forPath(nodePath); if (bytes != null) { return new String(bytes, charset); } } return null; } public String delete(String nodePath) throws Exception { nodePath = fixed(nodePath); Stat stat = checkExists(nodePath); if (stat != null) client.delete().deletingChildrenIfNeeded().forPath(nodePath); return nodePath; } public void close() throws Exception { client.close(); client = null; } private static String fixed(String path) { path = path.startsWith("/") ? path : String.format("/%s", path); return path.replaceAll("[/]{2,}", "/"); } public String buildPath(String... zNodeParts) { StringBuilder builder = new StringBuilder(256); String path; if (zNodeParts != null && zNodeParts.length != 0) { builder.append("/"); path = Joiner.on("/").appendTo(builder, zNodeParts).toString(); } else { path = builder.toString(); } builder = null; return fixed(path); } public List<String> getChildren(String nodePath) throws Exception { nodePath = fixed(nodePath); Stat stat = checkExists(nodePath); if (stat != null) { return client.getChildren().forPath(nodePath); } return null; }}
阅读全文
0 0
- zookeeper客户端工具类
- Zookeeper客户端工具
- 客户端工具测试 ZooKeeper
- Zookeeper工具类
- zookeeper-客户端
- Zookeeper客户端
- zookeeper客户端
- Zookeeper客户端
- Zookeeper客户端
- Zookeeper工具类的封装
- zookeeper实战与源码分析----用ZooKeeper封装自己的客户端工具
- webService客户端工具类
- MongoDB客户端工具类
- Zookeeper浏览器工具和Eclipse插件分享(跟redis一样,也有个客户端工具)
- 登录zookeeper客户端管理zookeeper
- ZooKeeper客户端命令
- Zookeeper客户端库ZkClient
- zookeeper 客户端的实现
- 随笔:C++键盘输入
- caffe 绘制acceracy曲线 IndexError: list index out of range的解决方案
- Java面试题全集(上)
- Android操作SQLite轻量级的的ORM工具
- PAT 1002. A+B for Polynomials (25) c++版
- zookeeper客户端工具类
- 聊聊 Apache、Tomcat && 静态网页、动态网页
- 一个谷歌面试题
- 1045. 快速排序
- HDU 2544
- mysql常用sql语句
- Android_其他语言交互篇——Js、C#、C、C++
- Jenkins基础入门-1-Jenkins简单介绍和环境安装
- 【XSY1599】dices 期望DP