.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();
        }
    }
}

最终运行效果如下图:

posted @ 2016-06-09 17:20  玻璃鱼儿  阅读(1381)  评论(0编辑  收藏  举报