服务器端:监听zk上父节点的子节点变化

  1. package monitor;
    import java.util.List;
    import java.util.concurrent.CountDownLatch;
    import java.util.concurrent.TimeUnit;
    import org.apache.zookeeper.CreateMode;
    import org.apache.zookeeper.WatchedEvent;
    import org.apache.zookeeper.Watcher;
    import org.apache.zookeeper.Watcher.Event.KeeperState;
    import org.apache.zookeeper.ZooDefs;
    import org.apache.zookeeper.ZooKeeper;
    /**
    * 监听客户端的上下线
    * @author lisg
    *
    */
    public class ServerMonitor {
    public static final String HOSTS = "vm1";
    private ZooKeeper zk = null; public static final String PARENT_PATH = "/monitor"; private static int client_count = 0;
    public ServerMonitor() {
    final CountDownLatch cdl = new CountDownLatch(1);
    try {
    zk = new ZooKeeper(HOSTS, 5000, new Watcher() {
    @Override
    public void process(WatchedEvent event) {
    if(KeeperState.SyncConnected.equals(event.getState())) {
    cdl.countDown();
    }
    }
    }); cdl.await(); //创建父节点
    if(zk.exists(PARENT_PATH, false) == null) {
    zk.create(PARENT_PATH,
    "".getBytes(),
    ZooDefs.Ids.OPEN_ACL_UNSAFE,
    CreateMode.PERSISTENT);
    }
    } catch (Exception e) {
    e.printStackTrace();
    }
    } public void run() {
    try {
    zk.getChildren(PARENT_PATH, new ClientChangeWatcher());
    } catch (Exception e) {
    e.printStackTrace();
    }
    } class ClientChangeWatcher implements Watcher {
    @Override
    public void process(WatchedEvent event) {
    try {
    if(Event.EventType.NodeChildrenChanged.equals(event.getType())) {
    //获取子节点,同时注册监听
    final List<String> children = zk.getChildren(PARENT_PATH, this);
    if(client_count > children.size()) {
    System.out.println("有客户端下线");
    } else {
    System.out.println("有客户端上线");
    }
    client_count = children.size();
    }
    } catch (Exception e) {
    e.printStackTrace();
    }
    }
    } public static void main(String[] args) {
    new ServerMonitor().run(); try {
    TimeUnit.DAYS.sleep(1);
    } catch (InterruptedException e) {
    e.printStackTrace();
    }
    }
    }

      

 
客户端:上线的时候在父节点上创建短暂的子节点
 
package monitor;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
import org.apache.zookeeper.CreateMode;
import org.apache.zookeeper.WatchedEvent;
import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.Watcher.Event.KeeperState;
import org.apache.zookeeper.ZooDefs.Ids;
import org.apache.zookeeper.ZooKeeper;
/**
* 客户端
* 上线的时候在zk上创建一个短暂的子节点
* @author lisg
*
*/
public class Client { public static final String CLIENT_PATH_PREFIX = "cli-";
public static void main(String[] args) {
final CountDownLatch cdl = new CountDownLatch(1);
try {
ZooKeeper zk = new ZooKeeper(ServerMonitor.HOSTS, 5000, new Watcher() {
@Override
public void process(WatchedEvent event) {
if(KeeperState.SyncConnected.equals(event.getState())) {
cdl.countDown();
}
}
}); cdl.await(); //创建父节点
zk.create(ServerMonitor.PARENT_PATH + "/" + CLIENT_PATH_PREFIX,
"".getBytes(),
Ids.OPEN_ACL_UNSAFE,
CreateMode.EPHEMERAL_SEQUENTIAL); TimeUnit.SECONDS.sleep(5);
zk.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}

  

附件列表

zookeeper应用 - 监控的更多相关文章

  1. zookeeper 的监控指标

    一 应用场景描述 在目前公司的业务中,没有太多使用ZooKeeper作为协同服务的场景.但是我们将使用Codis作为Redis的集群部署方案,Codis依赖ZooKeeper来存储配置信息.所以做好Z ...

  2. zookeeper 的监控指标(一)

    一 应用场景描述 在目前公司的业务中,没有太多使用ZooKeeper作为协同服务的场景.但是我们将使用Codis作为Redis的集群部署方案,Codis依赖ZooKeeper来存储配置信息.所以做好Z ...

  3. zookeeper的监控

    1.idea插件: zookeeper https://blog.csdn.net/long290046464/article/details/52974061 优点:直接查看,不用来回切换监控 缺点 ...

  4. JMXtrans + InfluxDB + Grafana实现Zookeeper性能指标监控

    一.总体效果图 这里是将集群全部放在一起,可以根据自己的审美看怎么放 二.监控指标 其中有些指标与第一篇Zookeeper通过四字命令基础监控(Zabbix)的四字命令的指标是有重复的,二者选一个则可 ...

  5. zookeeper监控告警

    一.ZooKeeper简介 ZooKeeper作为分布式系统中重要的组件,目前在业界使用越来越广泛,ZooKeeper的使用场景非常多,以下是几种典型的应用场景: l  数据发布与订阅(配置中心) l ...

  6. Hadoop记录- zookeeper 监控指标

    目前zookeeper获取监控指标已知的有两种方式: 1.通过zookeeper自带的 four letter words command 获取各种各样的监控指标 2.通过JMX Client连接zo ...

  7. Prometheus jvm_exporter监控zookeeper

    Zookeeper Prometheus 监控zookeeper使用jvm_exporter来采集数据,jvm_exporter是一个可以配置抓取和暴露JMX目标的mBeans的收集器. 下载java ...

  8. zabbix系列(十)zabbix添加对zookeeper集群的监控

    1.应用场景描述 在目前公司的业务中,有部分ESB架构用ZooKeeper作为协同服务的场景,做好ZooKeeper的监控很重要. 2.ZooKeeper监控要点 系统监控 内存使用量    ZooK ...

  9. 使用Zabbix监控ZooKeeper服务的健康状态

    一 应用场景描述 在目前公司的业务中,没有太多使用ZooKeeper作为协同服务的场景.但是我们将使用Codis作为Redis的集群部署方案,Codis依赖ZooKeeper来存储配置信息.所以做好Z ...

随机推荐

  1. 如何修复“sshd error: could not load host key”

    问题:当我尝试SSH到一台远程服务器时,SSH客户端登陆失败并提示“Connection closed by X.X.X.X”.在SSH服务器那端,我看到这样的错误消息:“sshd error: co ...

  2. ActiveMQ安全机制设置

    一.设置后台管理密码a.ActiveMQ使用的是jetty服务器,找到D:\div\apache-activemq-5.11.1\conf\jetty.xml文件: <bean id=" ...

  3. CentOS探索之路2---使用rpm安装JDK

    使用rpm安装jdk ​ 在前一Linux探索文章中http://www.cnblogs.com/Kidezyq/p/8782728.html,有关于通过yum指令安装原生OpenJDK的命令.当时有 ...

  4. Hive中自定义Map/Reduce示例 In Python

    Hive支持自定义map与reduce script.接下来我用一个简单的wordcount例子加以说明.使用Python开发(如果使用Java开发,请看这里). 开发环境: python:2.7.5 ...

  5. pictureBox控件获得图片路径的三种方法及自适应大小属性

    1.绝对路径: this.pictureBox2.Image=Image.FromFile("D:\\001.jpg"); 2.相对路径: Application.StartupP ...

  6. python学习之类和实例的属性;装饰器@property

    无论是类还是实例,一切皆是对象. Python是强动态语言,和java在这点上有所不同. class Ab(): a = 666 # 定义类对象Ab,自带属性a,值为666 # 使用Ab.__dict ...

  7. 常用js-API

    jquery.base64.js //下面是64个基本的编码 var base64EncodeChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklm ...

  8. 【JavaScript 从零开始】表达式和运算符(2)

    in运算符 in运算符希望它的左操作数是一个字符串或可以转换为字符串,希望它的右操作数是一个对象. 如果右侧的对象拥有一个名为做操作数值的属性名,那么表达式返回true,例如: var point= ...

  9. Java基础之Object类

    类Object是类层次结构的根类.每个类都直接或者间接地继承Object类.所有对象(包括数组)都实现这个类的方法.Object类中的构造方法只有一个,并且是无参构造方法,这说明每个类中默认的无参构造 ...

  10. 第一次搭建dns服务器

    CentOS 7 搭建DNS服务器 主要参考的是小左先森的一篇博客:https://blog.51cto.com/13525470/2054121. 1.搭建过程中遇到的几个问题说一下: a.在重启服 ...