.Net客户端监听ZooKeeper节点数据变化

Posted 玻璃鱼儿

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了.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();
        }
    }
}

最终运行效果如下图:

以上是关于.Net客户端监听ZooKeeper节点数据变化的主要内容,如果未能解决你的问题,请参考以下文章

zookeeper的监听器原理

zookeeper如何永久监听

Zookeeper详解:Zookeeper的应用场景

Zookeeper--05---客户端API操作

Zookeeper3.5.7版本——客户端命令行操作(命令行语法)

Zookeeper3.5.7版本——客户端命令行操作(znode 节点数据信息)