• 6.nuget安装C#Driver驱动ZooKeeperNet


    一: C# 的Drivers
     
      1. nuget上下载 zookeeper.Net
      
     
      IWatcher是什么?:
        client 连接到 server 后,会在server上面注册一个watcher[handler]
        如果server connection完成之后,反向通知client。(sendresponse)
        client会收到这个 handler
        client会利用这个handler找到这个注册的watcher,执行回调函数
         
     IWatcher接口的实现
        public class ZookeeperWatcher : IWatcher
        {
            public static CountdownEvent countdownEvent = new CountdownEvent(1);
            public void Process(WatchedEvent @event)
            {
                Console.WriteLine("path={0},state={1},type={2}", @event.Path, @event.State, @event.Type);
                countdownEvent.Signal(); 
            }
        }
        可以把IWatcher理解成一个 Observer 观察者,注册到 zookeeper中
     
        zookeeper初始化是一个异步的过程。
         【sendthread,eventthread】
           sendthread =》 zookeeper server
           eventthread =》 专门处理server返回的watcher通知
     
      2. Refletor 反编译DLL
     
      3. 【长连接 + watcher 模式】
        心跳: timeout/3
     
      4. 配置log4net.config
      注册:
      
      log4net.Config.XmlConfigurator.ConfigureAndWatch(new System.IO.FileInfo(AppDomain.CurrentDomain.BaseDirectory + "log4net.config"));
               
      使用:
      private static log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
     
      5. 客户端和server交互(心跳检测)
        client < = > server 【返回sessionid】
        syncConnect 同步成功 【网络正常】
        disconnect 失去连接等待重连 【网络断线】
        expired 断网后重连, Server会返回session过期 (一直保持重连,知道网络正常)
     
        为什么重连后,server会把sessionid抹掉?
          【临时节点概念,当网络断线后,datamip会被清空】
          你的当前zkCli.sh节点是属于那个sessionid的
     
     
      6. zookeeper连接初始化指定根路径
        连接到自己需要的路径。
         
      ZooKeeperNet.ZooKeeper zookeeper = new ZooKeeperNet.ZooKeeper("192.168.1.120:2181/datamip",
                    TimeSpan.FromSeconds(5),
                    new ZookeeperWatcher());
    
                //通过wait函数,等待ZookeeperWatcher 回调函数执行成功
                ZookeeperWatcher.countdownEvent.Wait();
                var list = zookeeper.GetChildren("/", false);
     
     
     
     
     
     
     
     
     
     
  • 相关阅读:
    前端开发者也可以酷酷地开发桌面程序
    手把手教你怎么搭建angular+gulp的项目(一)
    在Angular中,如果权限值是异步请求所得,如何将其设置为HTTP请求头的Authorization?
    AngularJs ng-repeat指令中怎么实现含有自定义指令的动态html
    第一篇随笔,练练手
    我参与 Seata 开源项目的一些感悟
    一次 kafka 消息堆积问题排查
    图解 Kafka 水印备份机制
    Seata 动态配置订阅与降级实现原理
    记一次 Kafka 集群线上扩容
  • 原文地址:https://www.cnblogs.com/dragon-L/p/8563382.html
Copyright © 2020-2023  润新知