public class ZKConnector implements Watcher{
private static final Logger logger =LoggerFactory.getLogger(ZKConnector.class); private CountDownLatch connectedSemaphore = new CountDownLatch(1);
private ZooKeeper zk =null; /**
* 释放zookeeper连接
*/
public void releaseConnection() {
if (this.zk!=null) {
try {
this.zk.close();
} catch ( InterruptedException e ) {
e.printStackTrace();
}
}
} /**
* 创建zookeeper的连接
* @param connectString zookeeper服务器地址列表
* @param sessionTimeout Session超时时间
*/
public void createConnection(String connectString, int sessionTimeout) {
//先释放zookeeper连接
this.releaseConnection();
try {
zk = new ZooKeeper( connectString, sessionTimeout, this);
connectedSemaphore.await();
} catch ( InterruptedException e ) {
logger.info( "连接创建失败,发生 InterruptedException");
e.printStackTrace();
} catch (IOException e ) {
logger.info( "连接创建失败,发生 IOException" );
e.printStackTrace();
}
} /**
* 检查Znode是否为空
*/
public boolean check(String zNode){
try {
return this.zk.exists(zNode, false).getDataLength()>0;
} catch (KeeperException | InterruptedException e) {
e.printStackTrace();
}
return false;
} /**
* 检查zNode是否存在
* 不为空 返回true
* 为空,则返回false
*/
public boolean exist(String zNode){
try {
Stat stat =this.zk.exists(zNode, false);
return stat==null?false:true;
} catch (KeeperException | InterruptedException e) {
e.printStackTrace();
}
return true;
} /**
* 读取zNode的数据
*/
public String readData(String path){
try {
if(this.zk.exists(path, false) == null){
return "";
}
return new String( this.zk.getData(path, false, null));
} catch ( KeeperException e){
logger.info("读取数据失败,发生KeeperException,path: " + path);
e.printStackTrace();
return "";
} catch ( InterruptedException e){
logger.info("读取数据失败,发生 InterruptedException,path: " + path);
e.printStackTrace();
return "";
}
} /**
* 更新zNode的数据
*/
public boolean writeData(String path,String data){
try {
if(this.zk.exists(path, false) == null){
return createPersistNode(path,data);
}else{
deleteNode(path);
createPersistNode(path,data);
}
} catch ( KeeperException e ) {
logger.info( "更新数据失败,发生KeeperException,path: " + path );
e.printStackTrace();
} catch ( InterruptedException e ) {
logger.info( "更新数据失败,发生 InterruptedException,path: " + path );
e.printStackTrace();
}
return false;
} /**
* 获取子节点数据
*/
public List<String> getChildren(String node){
try {
List<String> subNodes = this.zk.getChildren(node, false);
return subNodes;
} catch (KeeperException | InterruptedException e) {
e.printStackTrace();
}
return null;
} /**
* 创建持久化节点
* @param path 节点path
* @param data 初始数据内容
* @return
*/
public boolean createPersistNode(String path, String data) {
try {
String createpath =this.zk.create(path,data.getBytes(),Ids.OPEN_ACL_UNSAFE,CreateMode.PERSISTENT );
logger.info("节点创建成功, Path: "
+ createpath
+ ", content: " + data );
return true;
} catch ( KeeperException e ) {
logger.info( "节点创建失败,发生KeeperException" );
e.printStackTrace();
} catch ( InterruptedException e ) {
logger.info( "节点创建失败,发生 InterruptedException" );
e.printStackTrace();
}
return false;
} /**
* 创建短暂序列化节点
* @param path 节点path
* @param data 初始数据内容
* @param needWatch
* @return
*/
public String createEsquentialNode(String path, String data) {
String esquentialNode = null;
try {
esquentialNode =this.zk.create(path,data.getBytes(),Ids.OPEN_ACL_UNSAFE,CreateMode.EPHEMERAL_SEQUENTIAL);
logger.info("节点创建成功, Path: "
+ esquentialNode
+ ", content: " + data );
return esquentialNode;
} catch ( KeeperException e ) {
logger.info( "节点创建失败,发生KeeperException" );
e.printStackTrace();
} catch ( InterruptedException e ) {
logger.info( "节点创建失败,发生 InterruptedException" );
e.printStackTrace();
}
return null;
} /**
* 删除节点
*/
public void deleteNode(String path) {
try {
if(this.zk.exists(path, false) == null){
logger.info("该节点不存在!不做任何操作" );
}else{
this.zk.delete(path, -1);
logger.info("删除节点成功,path:"+ path);
}
} catch ( KeeperException e ) {
logger.info("删除节点失败,发生KeeperException,path: " + path);
e.printStackTrace();
} catch ( InterruptedException e ) {
logger.info("删除节点失败,发生 InterruptedException,path: " + path);
e.printStackTrace();
}
} @Override
public void process(WatchedEvent event) {
logger.info( "收到事件通知:" + event.getState() +"\n" );
if ( KeeperState.SyncConnected == event.getState() ) {
connectedSemaphore.countDown();
}
} }

连接Zookeeper操作的更多相关文章

  1. Zookeeper命令行操作(常用命令;客户端连接;查看znode路径;创建节点;获取znode数据,查看节点内容,设置节点内容,删除节点;监听znode事件;telnet连接zookeeper)

    8.1.常用命令 启动ZK服务 bin/zkServer.sh start 查看ZK服务状态 bin/zkServer.sh status 停止ZK服务 bin/zkServer.sh stop 重启 ...

  2. 第8章 ZooKeeper操作

    目录 8.1 集群环境搭建 1.上传ZooKeeper安装文件 2.编写配置文件 3.拷贝ZooKeeper安装信息到其它节点 4.修改其它节点配置 5.启动ZooKeeper 6.查看启动状态 7. ...

  3. java连接zookeeper服务器出现“KeeperErrorCode = ConnectionLoss for /test”

    昨天调试java连接zookeeper服务器,zookeeper搭建过程在这里不做赘述,在创建连接后,然后操作节点一直报异常 错误信息如下: Exception in thread "mai ...

  4. Zookeeper入门(七)之Java连接Zookeeper

    Java操作Zookeeper很简单,但是前提要把包导对. 关于Zookeeper的Linux环境搭建可以参考我的这篇博客:Linux环境下Zookeeper安装 下面进入正题: 一.导入依赖 < ...

  5. JAVA 连接 ZooKeeper之初体验

    Java连接Zookeeper 一.配置zk环境 本人使用的是虚拟机,创建了两台linux服务器(安装过程百度上很多) 准备zk的安装包,zookeeper-3.4.10.tar.gz,可在Apach ...

  6. dubbo连接zookeeper注册中心因为断网导致线程无限等待问题【转】

    最近维护的系统切换了网络环境,由联通换成了电信网络,因为某些过滤规则导致系统连不上zookeeper服务器(应用系统机器在深圳,网络为电信线路,zookeeper服务器在北京,网络为联通线路),因为我 ...

  7. Zookeeper操作

    Zookeeper操作 注意搭建: 1.集群规模不小于3个节点 2.服务器之间系统时间要保持一致 1.搭建步骤: 1.解压安装包 2.设置zookeeper环境变量 3.修改配置文件————zoo.c ...

  8. 使用spring连接及操作mongodb3.0

    前边有一篇记录过不使用spring,直接在java代码中连接和操作mongodb数据库,这里就紧随其后记录一下使用spring的情况下,在java中简单操作mongodb.   maven导包配置: ...

  9. python连接zookeeper的日志问题

    用python连接zookeeper时,在终端里,一直会有zookeeper的日志冒出来,这样会很烦. -- ::,:(: Exceeded deadline by 11ms 解决方法是在连接后设置一 ...

随机推荐

  1. Leetcode 491.递增子序列

    递增子序列 给定一个整型数组, 你的任务是找到所有该数组的递增子序列,递增子序列的长度至少是2. 示例: 输入: [4, 6, 7, 7] 输出: [[4, 6], [4, 7], [4, 6, 7] ...

  2. Java精确测量代码运行时间 代码执行时间 纳秒 nanoTime

      Java精确测量代码运行时间:         long startTime = System.nanoTime();  //開始時間         for(int i = 0;i<100 ...

  3. PAT1017

    本题要求计算A/B,其中A是不超过1000位的正整数,B是1位正整数.你需要输出商数Q和余数R,使得A = B * Q + R成立. 输入格式: 输入在1行中依次给出A和B,中间以1空格分隔. 输出格 ...

  4. HDU 5884 Sort(二分答案+计算WPL的技巧)

    Sort Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submi ...

  5. 【线性基】51nod1312 最大异或和&LOJ114 k大异或和

    1312 最大异或和 题目来源: TopCoder 基准时间限制:1 秒 空间限制:131072 KB 分值: 320 难度:7级算法题   有一个正整数数组S,S中有N个元素,这些元素分别是S[0] ...

  6. BZOJ1562 [NOI2009]变换序列 【KM算法】

    题目 输入格式 输出格式 输入样例 5 1 1 2 2 1 输出样例 1 2 4 0 3 提示 30%的数据中N≤50: 60%的数据中N≤500: 100%的数据中N≤10000. 题解 每个位置可 ...

  7. Dinic 网络流

    写个博客贴板子-- inline void add_edge(int x,int y,int z){ e[++tot].x=y,e[tot].cap=z; e[tot].next=h[x],h[x]= ...

  8. SpringBoot中使用RestTemplate

    spring框架提供的RestTemplate类可用于在应用中调用rest服务,它简化了与http服务的通信方式,统一了RESTful的标准,封装了http链接, 我们只需要传入url及返回值类型即可 ...

  9. DataSet导出Excel,比以往的方法导出的Excel外观更加好看

    原文发布时间为:2010-06-21 -- 来源于本人的百度文章 [由搬家工具导入] ======目前方法=========== #region 生成Excel/// <summary>/ ...

  10. ToolTip特效 JavaScript 盗取厦门人才网的特效

    原文发布时间为:2009-05-17 -- 来源于本人的百度文章 [由搬家工具导入] 源代码:http://www.xmaspx.com/Services/FileAttachment.ashx?At ...