Пример #1
0
 public void SubscribeChildChanges()
 {
     using (ZKClient zkClient = ZKClientBuilder.NewZKClient(TestUtil.zkServers).Build())
     {
         IZKChildListener childListener = new ZKChildListener();
         //子节点内容变化
         childListener.ChildChangeHandler = async(parentPath, currentChilds) =>
         {
             await Task.Run(() =>
             {
                 Console.WriteLine(parentPath);
                 Console.WriteLine(string.Join(".", currentChilds));
             });
         };
         //子节点数量变化
         childListener.ChildCountChangedHandler = async(parentPath, currentChilds) =>
         {
             await Task.Run(() =>
             {
                 Console.WriteLine(parentPath);
                 Console.WriteLine(string.Join(".", currentChilds));
             });
         };
         //"/testUserNode" 监听的节点,可以是现在存在的也可以是不存在的
         zkClient.SubscribeChildChanges("/testUserNode3", childListener);
         Thread.Sleep(TimeSpan.FromSeconds(60));
     }
 }
Пример #2
0
 public void CreateSession()
 {
     using (ZKClient zkClient = ZKClientBuilder.NewZKClient(TestUtil.zkServers).Build())
     {
         Console.WriteLine("conneted ok!");
     }
 }
Пример #3
0
        public async Task TestZKLeaderSeletor1()
        {
            LOG.Info("------------ BEFORE -------------");
            using (_zkClient = new ZKClient(TestUtil.zkServers))
            {
                await TestUtil.ReSetPathUnCreate(_zkClient, leaderPath);

                var msgList = new List <string>();
                await _zkClient.CreateRecursiveAsync(leaderPath, null, CreateMode.PERSISTENT);

                var listener = new ZKLeaderSelectorListener();
                listener.takeLeadership = async(client, selector) =>
                {
                    try
                    {
                        await Task.Delay(1000);
                    }
                    catch (ThreadInterruptedException)
                    {
                    }
                    msgList.Add("server1 I am the leader");
                    Console.WriteLine("server1: I am the leader-" + await selector.GetLeaderAsync());
                };


                var selector1 = new ZKLeaderSelector("server1", true, _zkClient, leaderPath, listener);

                var task = new Task(() =>
                {
                    var zkClient1 = ZKClientBuilder.NewZKClient()
                                    .Servers(TestUtil.zkServers)
                                    .SessionTimeout(10000)
                                    .Build();
                    var listener2 = new ZKLeaderSelectorListener();

                    listener2.takeLeadership = async(client, selector) =>
                    {
                        try
                        {
                            await Task.Delay(1000);
                        }
                        catch (ThreadInterruptedException)
                        {
                        }
                        msgList.Add("server2 I am the leader");
                        Console.WriteLine("server2: I am the leader-" + await selector.GetLeaderAsync());
                        selector.Close();
                    };
                    var selector2 = new ZKLeaderSelector("server2", true, zkClient1, leaderPath, listener2);
                    selector2.Start();
                });

                selector1.Start();
                task.Start();
                Thread.Sleep(1000);

                int size = TestUtil.WaitUntil(2, () => { return(msgList.Count); }, new TimeSpan(0, 0, 100));
                Assert.True(size == 2);
            }
        }
Пример #4
0
 public virtual void SetUp()
 {
     LOG.Info("------------ BEFORE -------------");
     _zkClient = ZKClientBuilder.NewZKClient()
                 .Servers(string.Format("{0}:{1}", TestUtil.ip, TestUtil.port))
                 .SessionTimeout(10000)
                 .Build();
     TestUtil.ReSetPathUnCreate(_zkClient, leaderPath);
 }
Пример #5
0
        public void TestZKLeaderSeletor()
        {
            List <string>  msgList = new List <string>();
            CountdownEvent count   = new CountdownEvent(20);
            CountdownEvent count1  = new CountdownEvent(20);

            _zkClient.CreateRecursive(leaderPath, null, CreateMode.Persistent);
            int index = 0;

            for (int i = 0; i < 20; i++)
            {
                string name = "server:" + index;
                Task   task = new Task(() =>
                {
                    ZKClient zkClient1 = ZKClientBuilder.NewZKClient()
                                         .Servers(string.Format("{0}:{1}", TestUtil.ip, TestUtil.port))
                                         .SessionTimeout(10000)
                                         .Build();
                    ZKLeaderSelectorListener listener = new ZKLeaderSelectorListener()
                                                        .TakeLeadership((client, selector) =>
                    {
                        msgList.Add(name + " I am the leader");
                        Console.WriteLine(name + ": I am the leader-" + selector.GetLeader());
                        selector.Close();
                        count1.Signal();
                    });


                    ZKLeaderSelector _selector = new ZKLeaderSelector(name, true, zkClient1, leaderPath, listener);

                    try
                    {
                        Console.WriteLine(name + ":waiting");
                        count.Wait();
                    }
                    catch (ThreadInterruptedException e1)
                    {
                    }
                    _selector.Start();

                    try
                    {
                        count1.Wait();
                    }
                    catch (ThreadInterruptedException e)
                    {
                    }
                });
                task.Start();
                count.Signal();
                Interlocked.Increment(ref index);
            }

            int size = TestUtil.WaitUntil(20, () => { return(msgList.Count); }, new TimeSpan(0, 0, 100));

            Assert.True(size == 20);
        }
Пример #6
0
        public void TestZKLeaderSeletor1()
        {
            List <string> msgList = new List <string>();

            _zkClient.CreateRecursive(leaderPath, null, CreateMode.Persistent);

            ZKLeaderSelectorListener listener = new ZKLeaderSelectorListener()
                                                .TakeLeadership((client, selector) =>
            {
                try
                {
                    Thread.Sleep(1000);
                }
                catch (ThreadInterruptedException e)
                {
                }
                msgList.Add("server1 I am the leader");
                Console.WriteLine("server1: I am the leader-" + selector.GetLeader());
            });


            ZKLeaderSelector selector1 = new ZKLeaderSelector("server1", true, _zkClient, leaderPath, listener);

            Task task = new Task(() =>
            {
                ZKClient zkClient1 = ZKClientBuilder.NewZKClient()
                                     .Servers(string.Format("{0}:{1}", TestUtil.ip, TestUtil.port))
                                     .SessionTimeout(10000)
                                     .Build();
                ZKLeaderSelectorListener listener2 = new ZKLeaderSelectorListener()
                                                     .TakeLeadership((client, selector) =>
                {
                    try
                    {
                        Thread.Sleep(1000);
                    }
                    catch (ThreadInterruptedException e)
                    {
                    }
                    msgList.Add("server2 I am the leader");
                    Console.WriteLine("server2: I am the leader-" + selector.GetLeader());
                    selector.Close();
                });
                ZKLeaderSelector selector2 = new ZKLeaderSelector("server2", true, zkClient1, leaderPath, listener2);
                selector2.Start();
            });

            selector1.Start();
            task.Start();
            Thread.Sleep(1000);


            int size = TestUtil.WaitUntil(2, () => { return(msgList.Count); }, new TimeSpan(0, 0, 100));

            Assert.True(size == 2);
        }
Пример #7
0
        public async Task Exists()
        {
            using (ZKClient zkClient = ZKClientBuilder.NewZKClient(TestUtil.zkServers).Build())
            {
                bool e = await zkClient.ExistsAsync("/testUserNode");

                //返回 true表示节点存在 ,false表示不存在
                Console.WriteLine(e);
            }
        }
Пример #8
0
        public async Task GetData()
        {
            using (ZKClient zkClient = ZKClientBuilder.NewZKClient(TestUtil.zkServers).Build())
            {
                //获取 节点中的对象
                User user = await zkClient.GetDataAsync <User>("/testUserNode");

                Console.WriteLine(user.Name);
            }
        }
Пример #9
0
 public async Task SetData()
 {
     using (ZKClient zkClient = ZKClientBuilder.NewZKClient(TestUtil.zkServers).Build())
     {
         User user = new User();
         user.Id   = 2;
         user.Name = "testUser2";
         //testUserNode 节点的路径
         //user 传入的数据对象
         await zkClient.SetDataAsync <User>("/testUserNode", user);
     }
 }
Пример #10
0
        public void CreateSession()
        {
            ZKClient zkClient = ZKClientBuilder.NewZKClient(TestUtil.zkServers)
                                .SessionTimeout(10000)
                                .ConnectionTimeout(10000)
                                .Serializer(new SerializableSerializer())
                                .Build();

            Console.WriteLine("conneted ok!");
            zkClient.Close();
            zkClient = null;
        }
Пример #11
0
        public ZookeeperRegistryService(IOptions <ZookeeperOption> options, ILoggerFactory loggerFactory) : base(loggerFactory)
        {
            if (options == null)
            {
                throw new ArgumentNullException(nameof(options));
            }
            this.Options = options.Value;

            configClient = ZKClientBuilder.NewZKClient(this.Options.ConnectString)
                           .SessionTimeout(this.Options.SessionTimeout)       //可选
                           .ConnectionTimeout(this.Options.ConnectionTimeout) //可选
                           .Build();                                          //创建实例
        }
Пример #12
0
        public async Task CreateNode()
        {
            using (ZKClient zkClient = ZKClientBuilder.NewZKClient(TestUtil.zkServers).Build())
            {
                User user = new User();
                user.Id   = 1;
                user.Name = "testUser";
                await zkClient.DeleteRecursiveAsync("/testUserNode");

                var path = await zkClient.CreateAsync("/testUserNode", user, CreateMode.PERSISTENT);

                //输出创建节点的路径
                Console.WriteLine("created path:" + path);
            }
        }
Пример #13
0
        public async Task Delete()
        {
            using (ZKClient zkClient = ZKClientBuilder.NewZKClient(TestUtil.zkServers).Build())
            {
                //删除单独一个节点,返回true表示成功
                bool e1 = await zkClient.DeleteAsync("/testUserNode");

                //删除含有子节点的节点
                bool e2 = await zkClient.DeleteRecursiveAsync("/test");

                //返回 true表示节点成功 ,false表示删除失败
                Console.WriteLine(e1);
                Console.WriteLine(e2);
            }
        }
Пример #14
0
        public void Exists()
        {
            ZKClient zkClient = ZKClientBuilder.NewZKClient(TestUtil.zkServers)
                                .SessionTimeout(10000)
                                .ConnectionTimeout(10000)
                                .Serializer(new SerializableSerializer())
                                .Build();

            Console.WriteLine("conneted ok!");

            bool e = zkClient.Exists("/testUserNode");

            //返回 true表示节点存在 ,false表示不存在
            Console.WriteLine(e);
            zkClient.Close();
            zkClient = null;
        }
Пример #15
0
        public void GetData()
        {
            ZKClient zkClient = ZKClientBuilder.NewZKClient(TestUtil.zkServers)
                                .SessionTimeout(10000)
                                .ConnectionTimeout(10000)
                                .Serializer(new SerializableSerializer())
                                .Build();

            Console.WriteLine("conneted ok!");

            Stat stat = new Stat();
            //获取 节点中的对象
            User user = zkClient.ReadData <User>("/testUserNode", stat);

            Console.WriteLine(user.Name);
            Console.WriteLine(stat);
            zkClient.Close();
            zkClient = null;
        }
Пример #16
0
 public void SubscribeDataChanges()
 {
     using (ZKClient zkClient = ZKClientBuilder.NewZKClient(TestUtil.zkServers).Build())
     {
         IZKDataListener dataListener = new ZKDataListener();
         // 节点创建和节点内容变化
         dataListener.DataCreatedOrChangeHandler = async(dataPath, data) =>
         {
             await Task.Run(() =>
             {
                 Console.WriteLine(dataPath + ":" + Convert.ToString(data));
             });
         };
         // 节点删除
         dataListener.DataDeletedHandler = async(dataPath) =>
         {
             await Task.Run(() =>
             {
                 Console.WriteLine(dataPath);
             });
         };
         // 节点创建
         dataListener.DataCreatedHandler = async(dataPath, data) =>
         {
             await Task.Run(() =>
             {
                 Console.WriteLine(dataPath + ":" + Convert.ToString(data));
             });
         };
         // 节点内容变化
         dataListener.DataChangeHandler = async(dataPath, data) =>
         {
             await Task.Run(() =>
             {
                 Console.WriteLine(dataPath);
             });
         };
         zkClient.SubscribeDataChanges("/testUserNode", dataListener);
         Thread.Sleep(TimeSpan.FromSeconds(60));
     }
 }
Пример #17
0
        public void Delete()
        {
            ZKClient zkClient = ZKClientBuilder.NewZKClient(TestUtil.zkServers)
                                .SessionTimeout(10000)
                                .ConnectionTimeout(10000)
                                .Serializer(new SerializableSerializer())
                                .Build();

            Console.WriteLine("conneted ok!");

            //删除单独一个节点,返回true表示成功
            bool e1 = zkClient.Delete("/testUserNode");
            //删除含有子节点的节点
            bool e2 = zkClient.DeleteRecursive("/test");

            //返回 true表示节点成功 ,false表示删除失败
            Console.WriteLine(e1);
            Console.WriteLine(e2);
            zkClient.Close();
            zkClient = null;
        }
Пример #18
0
        public void CreateNode()
        {
            ZKClient zkClient = ZKClientBuilder.NewZKClient(TestUtil.zkServers)
                                .SessionTimeout(10000)
                                .ConnectionTimeout(10000)
                                .Serializer(new SerializableSerializer())
                                .Build();

            Console.WriteLine("conneted ok!");
            User user = new User();

            user.Id   = 1;
            user.Name = "testUser";

            string path = zkClient.Create("/testUserNode", user, CreateMode.Persistent);

            //输出创建节点的路径
            Console.WriteLine("created path:" + path);
            zkClient.Close();
            zkClient = null;
        }
Пример #19
0
        public void SubscribeChildChanges()
        {
            ZKClient zkClient = ZKClientBuilder.NewZKClient(TestUtil.zkServers)
                                .SessionTimeout(10000)
                                .ConnectionTimeout(10000)
                                .Serializer(new SerializableSerializer())
                                .Build();

            Console.WriteLine("conneted ok!");
            IZKChildListener childListener = new ZKChildListener().ChildChange((parentPath, currentChilds) =>
            {
                Console.WriteLine(parentPath);
                Console.WriteLine(string.Join(".", currentChilds));
            });

            //"/testUserNode" 监听的节点,可以是现在存在的也可以是不存在的
            zkClient.SubscribeChildChanges("/testUserNode3", childListener);
            Thread.Sleep(int.MaxValue);
            zkClient.Close();
            zkClient = null;
        }
Пример #20
0
        public void WriteData()
        {
            ZKClient zkClient = ZKClientBuilder.NewZKClient(TestUtil.zkServers)
                                .SessionTimeout(10000)
                                .ConnectionTimeout(10000)
                                .Serializer(new SerializableSerializer())
                                .Build();

            Console.WriteLine("conneted ok!");

            User user = new User();

            user.Id   = 2;
            user.Name = "testUser2";

            //testUserNode 节点的路径
            // user 传入的数据对象
            zkClient.WriteData("/testUserNode", user);
            zkClient.Close();
            zkClient = null;
        }
        public void TestDistributedDelayLock()
        {
            _zkClient.CreateRecursive(lockPath, null, CreateMode.Persistent);
            int           index   = 0;
            List <string> msgList = new List <string>();

            for (int i = 0; i < 5; i++)
            {
                Task.Factory.StartNew(() =>
                {
                    ZKClient zkClient1 = ZKClientBuilder.NewZKClient()
                                         .Servers(string.Format("{0}:{1}", TestUtil.ip, TestUtil.port))
                                         .SessionTimeout(10000)
                                         .Build();
                    ZKDistributedDelayLock _lock = ZKDistributedDelayLock.NewInstance(zkClient1, lockPath);
                    autoReset.WaitOne();

                    _lock.Lock();
                    Console.WriteLine(Thread.CurrentThread.Name + ":lock....");
                    msgList.Add(Thread.CurrentThread.Name + ":unlock");
                    try
                    {
                        Thread.Sleep(1000);
                    }
                    catch (ThreadInterruptedException e)
                    {
                    }
                    Console.WriteLine(Thread.CurrentThread.Name + ":unlock....");
                    _lock.UnLock();
                });
                Interlocked.Increment(ref index);
            }

            autoReset.Set();

            int size = TestUtil.WaitUntil(5, () => { return(msgList.Count); }, new TimeSpan(0, 0, 200));

            Assert.True(size == 5);
        }
Пример #22
0
 public void SubscribeStateChanges()
 {
     using (ZKClient zkClient = ZKClientBuilder.NewZKClient(TestUtil.zkServers).Build())
     {
         IZKStateListener stateListener = new ZKStateListener();
         //状态改变
         stateListener.StateChangedHandler = async(state) =>
         {
             await Task.Run(() =>
             {
                 Console.WriteLine(state.ToString());
             });
         };
         //会话失效
         stateListener.SessionExpiredHandler = async(path) =>
         {
             await Task.Run(() =>
             {
                 Console.WriteLine(path);
             });
         };
         //创建会话
         stateListener.NewSessionHandler = async() =>
         {
             await Task.Run(() => {});
         };
         //会话失败
         stateListener.SessionEstablishmentErrorHandler = async(ex) =>
         {
             await Task.Run(() =>
             {
                 Console.WriteLine(ex.Message);
             });
         };
         zkClient.SubscribeStateChanges(stateListener);
         Thread.Sleep(TimeSpan.FromSeconds(60));
     }
 }
Пример #23
0
        public void SubscribeDataChanges()
        {
            ZKClient zkClient = ZKClientBuilder.NewZKClient(TestUtil.zkServers)
                                .SessionTimeout(10000)
                                .ConnectionTimeout(10000)
                                .Serializer(new SerializableSerializer())
                                .Build();

            Console.WriteLine("conneted ok!");
            IZKDataListener dataListener = new ZKDataListener()
                                           .DataCreatedOrChange((dataPath, data) =>
            {
                Console.WriteLine(dataPath + ":" + Convert.ToString(data));
            })
                                           .DataDeleted((dataPath) =>
            {
                Console.WriteLine(dataPath);
            });

            zkClient.SubscribeDataChanges("/testUserNode", dataListener);
            Thread.Sleep(int.MaxValue);
            zkClient.Close();
            zkClient = null;
        }
Пример #24
0
        static ConfigCenter()
        {
            var appVersionResponse = Client.Get(new GetAppVersion {
                AppIds = new string[] { "ZookeeperConfig" }
            });

            if (appVersionResponse.AppDtos != null && appVersionResponse.AppDtos.Count > 0)
            {
                var appDto      = appVersionResponse.AppDtos[0];
                var appSettings = Client.Get(new GetAppSettings {
                    AppId = appDto.Id
                });
                if (appSettings != null)
                {
                    foreach (AppSettingDto appSetting in appSettings.AppSettings)
                    {
                        if (appSetting.ConfigKey == "ZookeeperAddress")
                        {
                            zkClient = ZKClientBuilder.NewZKClient(appSetting.ConfigValue)
                                       .SessionTimeout(10000)
                                       .ConnectionTimeout(10000)
                                       .Serializer(new SerializableSerializer())
                                       .Build();
                        }
                    }
                }
            }
            if (zkClient == null)
            {
                zkClient = ZKClientBuilder.NewZKClient(ConfigurationManager.AppSettings["ZookeeperAddress"])
                           .SessionTimeout(10000)
                           .ConnectionTimeout(10000)
                           .Serializer(new SerializableSerializer())
                           .Build();
            }
        }