一、 zookeeper中的watcher
1. exists :监控的是【znode】的CUD 的操作
 
2. getdata 的时候注册的watcher【U,D 监控】update delete
exists 可以获取到当前的节点,但是无法获取到内容。
getdata 可以获取到最新的内容。
异常: 如果znode不存,是无法监控getdata
官方文档: A KeeperException with error code KeeperException.NoNode will be thrown if no node with the given path exists.
    
    同样的实现接口IWatcher
    

    public class DataWatcher: IWatcher
{
private ZooKeeper _zookeeper = null;
Action<WatchedEvent, string> _action = null; public DataWatcher(ZooKeeper zookeeper, Action<WatchedEvent, string> action)
{
_zookeeper = zookeeper;
_action = action;
} public void Process(WatchedEvent @event)
{
try
{
//Console.WriteLine("path={0},state={1},type={2}", @event.Path, @event.State, @event.Type);
//通过getdata获取内容
var content = Encoding.UTF8.GetString(_zookeeper.GetData(@event.Path, this, null));
if (_action != null)
{
_action(@event, content);
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
}
  使用:
  

            Console.WriteLine("欢迎来到zookeeper.net 9 ");
try
{
var bytes = zookeeper.GetData("/google", new DataWatcher(zookeeper, (e, data) =>
{
//data 是返回的内容
Console.WriteLine("path={0},state={1},type={2},data={3}", e.Path, e.State, e.Type, data);
}), null);
}
catch (KeeperException ex)
{
throw new Exception(ex.Message);
}
  3. getchildren 的时候注册的watcher
    子节点的add,remove 都是能够监控的到状态。【Update是监控不到的,需要使用exists】
 
   public class ChildrenWatcher : IWatcher
{
private ZooKeeper _zookeeper = null;
Action<WatchedEvent, IEnumerable<string>> _action = null; public ChildrenWatcher(ZooKeeper zookeeper, Action<WatchedEvent, IEnumerable<string>> action)
{
_zookeeper = zookeeper;
_action = action;
} public void Process(WatchedEvent @event)
{
try
{
//通过getdata获取内容
var list = _zookeeper.GetChildren(@event.Path, this, null);
if (_action != null)
{
_action(@event, list);
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
} }
try
{
var list_t = zookeeper.GetChildren("/google", new ChildrenWatcher(zookeeper, (e, data) =>
{
Console.WriteLine("path={0},state={1},type={2},data={3}", e.Path, e.State, e.Type, string.Join(",", data));
}), null); }
catch (KeeperException ex)
{
throw new Exception(ex.Message);
}

执行创建,删除后的效果

  

监听结果
  
 
应用场景:
  【智能感知上下线】 服务注(provider) 和发现(client)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

9.使用GetData,Children实现对ZNode的监控的更多相关文章

  1. zabbix实现对tomcat的监控

    zabbix实现对tomcat的监控 工作原理 比如:当Zabbix-Server需要知道java应用程序的某项性能的时候,会启动自身的一个Zabbix-JavaPollers进程去连接Zabbix- ...

  2. 基于DevExpress实现对PDF、Word、Excel文档的预览及操作处理

    http://www.cnblogs.com/wuhuacong/p/4175266.html 在一般的管理系统模块里面,越来越多的设计到一些常用文档的上传保存操作,其中如PDF.Word.Excel ...

  3. C#代码实现对HTTP POST参数进行排序

    private static string GetSortedParas(Dictionary<string, string> dic) { dic = dic.OrderBy(key = ...

  4. 在VS2015中用C++创建DLL并用C#调用且同时实现对DLL的调试

    from:http://m.blog.csdn.net/article/details?id=51075023 在VS2015中先创建C#项目,然后再创建要编写的动态库DLL项目,这样做的好处是整个解 ...

  5. 【JAVA使用XPath、DOM4J解析XML文件,实现对XML文件的CRUD操作】

    一.简介 1.使用XPath可以快速精确定位指定的节点,以实现对XML文件的CRUD操作. 2.去网上下载一个“XPath帮助文档”,以便于查看语法等详细信息,最好是那种有很多实例的那种. 3.学习X ...

  6. Java Web学习系列——Maven Web项目中集成使用Spring、MyBatis实现对MySQL的数据访问

    本篇内容还是建立在上一篇Java Web学习系列——Maven Web项目中集成使用Spring基础之上,对之前的Maven Web项目进行升级改造,实现对MySQL的数据访问. 添加依赖Jar包 这 ...

  7. struts2视频学习笔记 22-23(基于XML配置方式实现对action的所有方法及部分方法进行校验)

    课时22 基于XML配置方式实现对action的所有方法进行校验   使用基于XML配置方式实现输入校验时,Action也需要继承ActionSupport,并且提供校验文件,校验文件和action类 ...

  8. 用 Python 脚本实现对 Linux 服务器的监控

    目前 Linux 下有一些使用 Python 语言编写的 Linux 系统监控工具 比如 inotify-sync(文件系统安全监控软件).glances(资源监控工具)在实际工作中,Linux 系统 ...

  9. 在应用程序中实现对NandFlash的操作

    以TC58NVG2S3ETA00 为例: 下面是它的一些物理参数: 图一 图二 图三 图四 图五 图6-0 图6-1 说明一下,在图6-1中中间的那个布局表可以看做是实际的NandFlash一页数据的 ...

随机推荐

  1. Jmeter的参数配置

    Ramp-up Period(in seconds) [1]决定多长时间启动所有线程.如果使用10个线程,ramp-up period是100秒,那么JMeter用100秒使所有10个线程启动并运行. ...

  2. 灵活运用SMART原则梳理目标

    1:立刻行动 执行力是老生常谈了,提高执行力不拖延,源自于对目标的充分理解和超出常人的坚持. 如何深刻理解目标?一方面要有基础的知识.能力积累,另一方面要灵活运用SMART原则从不同维度梳理目标. 2 ...

  3. java之mail发送

    一.邮箱的应用在实际的Java开发过程中,也是非常常见的.我这里就是写了一个简单的邮箱发送功能. 二.邮箱的基本配置,使用的是JavaMailSender的提供的方式来实现邮件的发送 1)qq邮箱的配 ...

  4. Linux gdb调试器用法全面解析

    GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具,GDB主要可帮助工程师完成下面4个方面的功能: 启动程序,可以按照工程师自定义的要求随心所欲的运行程序. 让被调试的程序在工程师指定的断 ...

  5. Oracle数据库物理结构

    Oracle数据库物理结构 oracle的数据,实际上是以文件的形式来保存的,文件中出了保存用户的数据之外,还需要保存管理数据和日志数据等等.作为一个DBA,必须需要知道自己的数据分别保存在什么位置上 ...

  6. php+nginx环境下的php报错设置

    修改php.ini的配置: display_errors = Off(关闭) display_errors = On(开启) 设置修改完成后重启php-cgi进程 killall -9 php-cgi ...

  7. ggplot2 texts : Add text annotations to a graph in R software

    http://www.sthda.com/english/wiki/ggplot2-texts-add-text-annotations-to-a-graph-in-r-software Instal ...

  8. 8种常被忽视的SQL错误用法

    作者:一杯甜酒 原文:https://blog.csdn.net/u012562943/article/details/71403500 sql语句的执行顺序: FROM <left_table ...

  9. 如何连接并处理 sdf 数据库文件(便捷数据库处理)

    如何连接并处理 sdf 数据库文件 SqlCeConnection cc = new SqlCeConnection();        DataTable dt = new DataTable(); ...

  10. EL的基本使用

    总结:EL操作的是作用域 <body> <% Users users = new Users("lisi","lisi123","l ...