一、 zookeeper是一个分布式的协调程序(所有程序都是通过订阅它来相互感知)
   

1. tcp(长链接) + watcher
server -》client
client -》server
 
2. Driver 中的方法 exists() 监控一个znode的 CURD 的操作。
client1 client2 同时订阅 baidu节点
通过对baidu节点的CURD操作,exists就会监控到,从而通知客户端
 
接下来是C#代码的实现
 
1. 实现接口 IWatcher
    public class ExistsWatcher : IWatcher
{
private ZooKeeper _zookeeper = null;
public ExistsWatcher(ZooKeeper zookeeper)
{
_zookeeper = zookeeper;
} public void Process(WatchedEvent @event)
{
Console.WriteLine("path={0},state={1},type={2}", @event.Path, @event.State, @event.Type);
//重新注册 exists
_zookeeper.Exists(@event.Path, this);
}
}

2. 注册zookeeper  ZookeeperWatcher的实现看 上一节课代码

       ZooKeeper zookeeper = new ZooKeeper("192.168.84.136:2181", TimeSpan.FromSeconds(),new ZookeeperWatcher());

            //通过wait函数,等待ZookeeperWatcher 回调函数执行成功
ZookeeperWatcher.countdownEvent.Wait();
var list = zookeeper.GetChildren("/", false);
#region 第8节try
{
Stat stat = new Stat();
stat = zookeeper.Exists("/google", new ExistsWatcher(zookeeper));
}
catch (KeeperException ex)
{
throw new Exception(ex.Message);
}
#endregion
注意:
client -》server watcher 监控是一次性的,
client 需要在wathcer接收到通知后,从新注册exists
 
 
执行了一次创建,一次删除,客户端都收到了通知
 
 
 
3. exists可以监控那些事件
NodeDeleted,NodeCreated,NodeDataChanged
 
4. exists 应用场景
master -》 backup 双机热备
【临时节点】
 
zookeeper本质就是一个协调程序。
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

8.使用Exists监控ZNode的三大Change事件的更多相关文章

  1. input事件与change事件

    输入框的change事件: 必须等到输入框失去焦点的时候才会触发,鼠标在空白的地方点一下: 输入框的input事件: 在输入内容变化的同时,实时的触发,不需要等到失去焦点.

  2. 鼠标的change事件

    原本想着在<input>输入输入框中添加change事件,来实现对输入内容的限定. 当人们在使用时跟多的会直接去点击完成.所以完成按钮的点击事件会和change事件产生 冲突,所以我把验证 ...

  3. jquery input change事件

    input输入框的change事件,要在input失去焦点的时候才会触发 $('input[name=myInput]').change(function() { ... }); 在输入框内容变化的时 ...

  4. 浅谈Extjs radiogroup change事件与items下的checked属性

    在使用Extjs制作crud时,由于添加和修改界面的高度相似,使用了相同的row字段. 在角色字段中使用了change监听事件,用于动态的无效化权限分配字段,因为权限分配界面默认没有隐藏,设定了che ...

  5. <input type="file"> change事件异常处理办法

    问题:最近发现一个奇怪的bug, 那就是在上传图片需要采用input type=file来进行文件选择.由于为了适应美工的UI图,所以是把选择文件的input框隐藏了.然后通过另外一个按钮的点击事件来 ...

  6. JQuery触发radio或checkbox的change事件

    在JQuery中,当给radio或checkbox添加一个change事件时,如果它的值发生变化就会触发change事件;本文将详细介绍如何利用JQuery触发Checkbox的change事件需要了 ...

  7. file标签选择文件change事件失效处理方法

    file只能处罚一次change事件,在change事件中重新替换file标签即可生效 eg: $(function(){ //上传图片 $("body").on("ch ...

  8. JQuery Checkbox的change事件

    JQuery   Checkbox的change事件  参考 http://blog.csdn.net/hbhgjiangkun/article/details/8126981   $(functio ...

  9. Dynamic CRM 2013学习笔记(二十八)用JS动态设置字段的change事件、必填、禁用以及可见

    我们知道通过界面设置字段的change事件,是否是必填,是否可见非常容易.但有时我们需要动态地根据某些条件来设置,这时有需要通过js来动态地控制了. 下面分别介绍如何用js来动态设置.   一.动态设 ...

随机推荐

  1. 关于Class.getResource和ClassLoader.getResource的路径问题(转)

    参考博客:http://www.cnblogs.com/yejg1212/p/3270152.html Class.getResource(String path) 当path以/开头,如/a/b/c ...

  2. php错误:Uncaught exception com_exception with message Failed to create COM object

    本文为大家讲解的是php错误:Uncaught exception com_exception with message Failed to create COM object,感兴趣的同学参考下. ...

  3. RMAN非归档

    改变归档模式到非归档模式: 1)SQL>SHUTDOWN IMMEDIATE; 2)SQL>STARTUP MOUNT; 3)SQL>ALTER DATABASE NOARCHIVE ...

  4. Tomcat中部署网站和绑定域名

    在安装的tomcat的文件夹下有个conf文件夹 下面有个server.xml文件, 1. 使用80端口 默认tomcat用的是8080端口. <Connector port="808 ...

  5. CEP实时分析模型

    大数据量的实时分析场景: 股票实时分析系统:大数据量(基于内存),要求分析汇总数据

  6. MySQL与PostgreSQL相比哪个更好?

    网上已经有很多拿PostgreSQL与MySQL比较的文章了,这篇文章只是对一些重要的信息进行下梳理.在开始分析前,先来看下这两张图: MySQL MySQL声称自己是最流行的开源数据库.LAMP中的 ...

  7. MPI n 体问题

    ▶ <并行程序设计导论>第六章中讨论了 n 体问题,分别使用了 MPI,Pthreads,OpenMP 来进行实现,这里是 MPI 的代码,分为基本算法和简化算法(引力计算量为基本算法的一 ...

  8. Linux下安装MATLAB

    Why do I see "Preparing installation files ... Installing ... Finished..." in the terminal ...

  9. shell脚本通过expect脚本实现自动输入密码

     背景:在远程文件下载时,需要输入对方的服务器密码,shell不支持交互输入内容,可以用下面两种方式实现   一.在shell脚本中嵌入expect来实现密码输入 expect是一个自动交互功能的工具 ...

  10. gorm中自己写sql的方法实现

    type Result struct { Total int } var result Result //当天修改作业的总时间:分钟 dao.DB(dao.HomeworkTable).Raw(&qu ...