一、 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. VCS双机原理

    VCS双机的配置目录:/etc/VRTSvcs/conf/config/main.cf VCS双机的监控脚本目录:/opt/VRTSvcs/bin/mdcc/ VCS双机日志目录:/var/VRTSv ...

  2. ease,seae-in,ease-in-out,ease-out区别

    值 描述 linear 规定以相同速度开始至结束的过渡效果(等于 cubic-bezier(0,0,1,1)).(匀速) ease 规定慢速开始,然后变快,然后慢速结束的过渡效果(cubic-bezi ...

  3. WebStorm live edit 浏览器实现同步实现步骤

    1.打开WebStore的设置对话框,找到live edit选项,选中Enable live editing. 2.打开Chrome浏览器,进入Chrome网上商店,搜索JetBrains IDE S ...

  4. Java前期(静态)绑定和后期(动态)绑定

    Java前期(静态)绑定和后期(动态)绑定 程序绑定的概念:绑定指的是一个方法的调用与方法所在的类(方法主体)关联起来.对java来说,绑定分为静态绑定和动态绑定:或者叫做前期绑定和后期绑定. 静态绑 ...

  5. python logging 重复写日志问题

    用Python的logging模块记录日志时,遇到了重复记录日志的问题,第一条记录写一次,第二条记录写两次,第三条记录写三次...很头疼,这样记日志可不行.网上搜索到了原因与解决方案: 原因:没有移除 ...

  6. 517. Super Washing Machines

    ▶ 超级洗碗机.给定一个有 n 元素的整数数组,我们把 “将指定位置上元素的值减 1,同时其左侧或者右侧相邻元素的值加 1” 称为一次操作,每个回合内,可以选定任意 1 至 n 个位置进行独立的操作, ...

  7. 【C#】串口操作实用类

    做工业通 信有很长时间了,特别是串口(232/485),有VB/VC/C各种版本的串口操作代码,这些代码也经过了多年的现场考验,应该说是比较健壮的代码,但 是目前却没有C#相对成熟的串口操作代码,最近 ...

  8. delphi TEncoding

    #include <tchar.h> #include <memory> //For STL auto_ptr class //------------------------ ...

  9. Java路程

    Java学习这一部分其实也算是今天的重点,这一部分用来回答很多群里的朋友所问过的问题,那就是你是如何学习Java的,能不能给点建议?今天我是打算来点干货,因此咱们就不说一些学习方法和技巧了,直接来谈每 ...

  10. matplotlib —— 添加文本信息(text)

    [详细]http://hyry.dip.jp/tech/book/page/scipy/matplotlib_fast_plot.html http://blog.csdn.net/lanchunhu ...