zoukankan      html  css  js  c++  java
  • 8.使用Exists监控ZNode的三大Change事件

    一、 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(5),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本质就是一个协调程序。
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
  • 相关阅读:
    C# WebApi 获取客户端ip地址
    C# 构造函数快捷键
    2 .SHELL 5~10节
    Spring项目集成apidoc生成api接口文档
    根据域名查找对应的ip及端口
    高质量SQL的30条建议
    1 .shell编程1~5
    CentOS7安装mysql8
    编译安Apache2.4.43报错checking for APR... no configure: error: APR not found. Please read the documentation.
    rm -rf * 的正确用法
  • 原文地址:https://www.cnblogs.com/dragon-L/p/8574856.html
Copyright © 2011-2022 走看看