8.使用Exists监控ZNode的三大Change事件
生活随笔
收集整理的這篇文章主要介紹了
8.使用Exists监控ZNode的三大Change事件
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
一、 zookeeper是一個(gè)分布式的協(xié)調(diào)程序(所有程序都是通過(guò)訂閱它來(lái)相互感知) 1. tcp(長(zhǎng)鏈接) + watcher server -》client client -》server 2. Driver 中的方法 exists() 監(jiān)控一個(gè)znode的 CURD 的操作。 client1 client2 同時(shí)訂閱 baidu節(jié)點(diǎn) 通過(guò)對(duì)baidu節(jié)點(diǎn)的CURD操作,exists就會(huì)監(jiān)控到,從而通知客戶端 接下來(lái)是C#代碼的實(shí)現(xiàn) 1. 實(shí)現(xiàn)接口?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);//重新注冊(cè) exists_zookeeper.Exists(@event.Path, this);}}
2. 注冊(cè)zookeeper ?ZookeeperWatcher的實(shí)現(xiàn)看 上一節(jié)課代碼
ZooKeeper zookeeper = new ZooKeeper("192.168.84.136:2181", TimeSpan.FromSeconds(5),new ZookeeperWatcher());//通過(guò)wait函數(shù),等待ZookeeperWatcher 回調(diào)函數(shù)執(zhí)行成功 ZookeeperWatcher.countdownEvent.Wait();var list = zookeeper.GetChildren("/", false);#region 第8節(jié)try{Stat stat = new Stat();stat = zookeeper.Exists("/google", new ExistsWatcher(zookeeper));}catch (KeeperException ex){throw new Exception(ex.Message);}#endregion?
注意: client -》server watcher 監(jiān)控是一次性的, client 需要在wathcer接收到通知后,從新注冊(cè)exists 執(zhí)行了一次創(chuàng)建,一次刪除,客戶端都收到了通知 3. exists可以監(jiān)控那些事件 NodeDeleted,NodeCreated,NodeDataChanged 4. exists 應(yīng)用場(chǎng)景 master -》 backup 雙機(jī)熱備 【臨時(shí)節(jié)點(diǎn)】 zookeeper本質(zhì)就是一個(gè)協(xié)調(diào)程序。轉(zhuǎn)載于:https://www.cnblogs.com/dragon-L/p/8574856.html
總結(jié)
以上是生活随笔為你收集整理的8.使用Exists监控ZNode的三大Change事件的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 基于类的访问权限
- 下一篇: OpenLayer学习之矢量地图