zoukankan      html  css  js  c++  java
  • .Net客户端监听ZooKeeper节点数据变化

    一个很简单的例子,用途是监听zookeeper中某个节点数据的变化,具体请参见代码中的注释

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading;
    using System.Threading.Tasks;
    using ZooKeeperNet;
    
    namespace ZooKeeperDemo
    {
        /// <summary>
        /// 监听者实现类
        /// </summary>
        public class Watcher : IWatcher
        {
            public void Process(WatchedEvent @event)
            {
                if (@event.Type == EventType.NodeDataChanged)
                {
                    Console.WriteLine(string.Format("节点:{0},数据发生变化...",@event.Path));
                    zkHelper.NodeDataChangeListen(@event.Path);
                }
            }
        }
    
        /// <summary>
        /// zookeeper操作帮助类
        /// </summary>
        public class zkHelper {
            /// <summary>
            /// 控制zk只有一个实例
            /// </summary>
            public static ZooKeeper zk = new ZooKeeper("192.168.1.136:2181", new TimeSpan(0, 0, 0, 5000), new Watcher());
            
            /// <summary>
            /// 监听指定ZooKeeper指定节点数据变化
            /// </summary>
            /// <param name="nodePath"></param>
            public static void NodeDataChangeListen(string nodePath) {
                //调用zk的GetData()方法取数据,当数据有变化时会回调Watcher
                byte[] byts = zk.GetData(nodePath, true, null);
                //打印出变化后的数据
                Console.WriteLine(string.Format("获取到节点{0}的数据为:{1}", nodePath, Encoding.Default.GetString(byts)));
            }
        }
    
        class Program
        {
            static void Main(string[] args)
            {
                //操作步骤
                //0.导入操作Zookeeper的相关类库(NuGet方式),Install-Package ZooKeeperNet
                //1.运行当前控制台程序
                //2.在linux中连接到zkCli.sh
                //3.用命令行在linux中修改zookeeper中/root/childtwo 节点的数据
                //4.修改数据的命令为 set /root/childtwo hello888888
                //5.当前控制台程序监测到/root/childtwo节点数据变化,并将变化的数据打印到控制台
                //6.重复上面第5和底6个步骤,当前控制台的数据会不断的发生变化
    
                zkHelper.NodeDataChangeListen("/root/childtwo");
                Console.ReadKey();
            }
        }
    }

    最终运行效果如下图:

  • 相关阅读:
    Django之查询总结
    cookie与session
    Django之跨表查询及添加记录
    Django框架之单表操作
    Django框架之ORM(数据库)操作
    Django框架之模板基础,静态文件配置
    Django框架之模板语法(重要!)
    Django基础篇
    Django-MTV
    [BZOJ 1034] [ZJOI2008] 泡泡堂BNB 【贪心】
  • 原文地址:https://www.cnblogs.com/huangzelin/p/zookeeper.html
Copyright © 2011-2022 走看看