博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
zookeeper 节点的移动与删除
阅读量:5093 次
发布时间:2019-06-13

本文共 3029 字,大约阅读时间需要 10 分钟。

package com.zhengmo.test;import java.util.List;import org.apache.zookeeper.CreateMode;import org.apache.zookeeper.KeeperException;import org.apache.zookeeper.ZooDefs.Ids;import org.apache.zookeeper.ZooKeeper;/** * @author zhengmo */public class ZkMove {    private static int deleteCount = 0;    private static int moveCount = 0;    public static void main(String[] args) throws Exception {        //        //旧zk服务器        ZooKeeper oldzk = new ZooKeeper("192.168.1.112:2181", 60000, null);        //新zk服务器        ZooKeeper newzk = new ZooKeeper("172.17.32.105:2181", 60000, null);        //需要迁移的节点        String node = "/dubbo";        //删除指定节点        delete(newzk, node);        System.out.println("删除节点数:" + deleteCount);        //获取节点下的一级子节点        List
children = oldzk.getChildren(node, false); move(oldzk, newzk, children, node); System.out.println("移动节点数:" + moveCount); oldzk.close(); newzk.close(); } /** * 递归删除指定节点的子节点. * @param newzk zk * @param node 节点 * @return 成功否 * @throws Exception 异常 */ private static boolean delete(ZooKeeper newzk, String node) throws Exception { List
children = newzk.getChildren(node, false); if (children == null || children.size() == 0) { //System.out.println("delete node:" + node); newzk.delete(node, -1); deleteCount++; return true; } else { for (String child : children) { while (!delete(newzk, node + "/" + child)) { } } return false; } } /** * 移动指定zk1的指定节点到指定zk2的节点下. * @param oldzk 旧zk * @param newzk 新zk * @param children 子节点 * @param parent 父节点 * @throws KeeperException 异常 * @throws InterruptedException 异常 */ private static void move(ZooKeeper oldzk, ZooKeeper newzk, List
children, String parent) throws KeeperException, InterruptedException { if (newzk.exists(parent, false) == null) { newzk.create(parent, null, Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT); System.out.println("create " + parent); } if (children == null || children.isEmpty()) { return; } else { for (String child : children) { String c = parent + "/" + child; //System.out.println(c); byte[] data = oldzk.getData(c, false, null); if (newzk.exists(c, false) == null) { newzk.create(c, data, Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT); moveCount++; } else { newzk.setData(c, data, -1, null, null); moveCount++; } //递归移动 move(oldzk, newzk, oldzk.getChildren(c, false), c); } } }}

zookeeper 有时候需要移动节点。

posted on
2016-01-07 10:40 阅读(
...) 评论(
...)

转载于:https://www.cnblogs.com/rench/p/5108969.html

你可能感兴趣的文章
android中自定义下拉框(转)
查看>>
Android设计模式源码解析之外观模式(Facade)
查看>>
使用word发布博客
查看>>
冒泡排序算法的C++,Java和Python实现和冒泡排序算法三种语言效率的比较
查看>>
C9---include,编译
查看>>
Maven简介(六)——Dependency
查看>>
android106 C基本数据类型
查看>>
oc-25-id类型
查看>>
STL 案例分析
查看>>
[ActionScript 3.0] AS3 双A字模型
查看>>
后台管理项目简单小总结------彭记(021)
查看>>
死磕JDK源码之Thread
查看>>
jekyll 安装 ...
查看>>
微信页面关于点击按钮关注公众号放到链接里无关注按钮
查看>>
python 字典处理的一些坑
查看>>
构建oracle12c的Docker镜像
查看>>
用户权限命令(chmod,chown,umask,lsattr/chattr)
查看>>
Maven详解
查看>>
Linux系统中‘dmesg’命令处理故障和收集系统信息的7种用法
查看>>
数据结构 : Hash Table [II]
查看>>