一个很简单的例子,用途是监听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(); } } }
最终运行效果如下图: