示例#1
0
        protected override void doSubscribe(ServiceMeta serviceMeta)
        {
            string           directory     = $"/meou/provider/{serviceMeta.getGroup()}/{serviceMeta.getName()}/{serviceMeta.getVersion()}";
            IZKChildListener childListener = new ZKChildListener();

            childListener.ChildChangeHandler = (parentPath, currentChilds) =>
            {
                var          list = new List <RegisterMeta>(currentChilds.Count);
                RegisterMeta temp = null;
                foreach (var child in currentChilds)
                {
                    temp = parseRegisterMeta($"{parentPath}/{child}");
                    list.Add(temp);
                }

                notify(serviceMeta, list);

                return(Task.CompletedTask);
            };

            //childListener.ChildCountChangedHandler = async (parentPath, currentChilds) =>
            //{
            //    await notify(serviceMeta, NotifyEvent.CHILD_ADDED, 1L, new List<RegisterMeta>());
            //};
            configClient.SubscribeChildChanges(directory, childListener);
        }
示例#2
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));
     }
 }
        private ZKDistributedLock(ZKClient client, string lockPach)
        {
            this.client   = client;
            this.lockPath = lockPach;
            IZKChildListener childListener = new ZKChildListener().ChildChange(
                (parentPath, currentChilds) =>
            {
                if (Check(currentSeq, currentChilds))
                {
                    semaphore.Release();
                }
            });

            this.countListener = childListener;
        }
示例#4
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;
        }
示例#5
0
        public void TestHandleChildChanges()
        {
            LOG.Info("--- testHandleChildChanges");
            string path  = "/a";
            int    count = 0;
            Holder <List <string> > children = new Holder <List <string> >();
            IZKChildListener        listener = new ZKChildListener().ChildChange(
                (parentPath, currentChilds) =>
            {
                Interlocked.Increment(ref count);
                children.value = currentChilds;
            });

            _zkClient.SubscribeChildChanges(path, listener);

            // ----
            // Create the root node should throw the first child change event
            // ----
            _zkClient.CreatePersistent(path);

            // wait some time to make sure the event was triggered
            TestUtil.WaitUntil(1, () => { return(count); }, new TimeSpan(0, 0, 0, 5));
            Assert.True(1 == count);
            Assert.True(0 == children.value.Count);

            // ----
            // Creating a child node should throw another event
            // ----
            count = 0;
            _zkClient.CreatePersistent(path + "/child1");

            // wait some time to make sure the event was triggered
            TestUtil.WaitUntil(1, () => { return(count); }, new TimeSpan(0, 0, 0, 5));
            Assert.True(1 == count);
            Assert.True(1 == children.value.Count);
            Assert.True("child1" == children.value[0]);

            // ----
            // Creating another child and deleting the node should also throw an event
            // ----
            count = 0;
            _zkClient.CreatePersistent(path + "/child2");
            _zkClient.DeleteRecursive(path);

            // wait some time to make sure the event was triggered
            bool eventReceived = TestUtil.WaitUntil(true, () => { return(count > 0 && children.value == null); }, new TimeSpan(0, 0, 0, 5));

            Assert.True(eventReceived);
            Assert.Null(children.value);

            // ----
            // Creating root again should throw an event
            // ----
            count = 0;
            _zkClient.CreatePersistent(path);

            // wait some time to make sure the event was triggered
            eventReceived = TestUtil.WaitUntil(true, () => { return(count > 0 && children.value != null); }, new TimeSpan(0, 0, 0, 5));
            Assert.True(eventReceived);
            Assert.True(0 == children.value.Count);

            // ----
            // Creating child now should throw an event
            // ----
            count = 0;
            _zkClient.CreatePersistent(path + "/child");

            // wait some time to make sure the event was triggered
            eventReceived = TestUtil.WaitUntil(true, () => { return(count > 0); }, new TimeSpan(0, 0, 0, 5));
            Assert.True(eventReceived);
            Assert.True(1 == children.value.Count);
            Assert.True("child" == children.value[0]);

            // ----
            // Deleting root node should throw an event
            // ----
            count = 0;
            _zkClient.DeleteRecursive(path);

            // wait some time to make sure the event was triggered
            eventReceived = TestUtil.WaitUntil(true, () => { return(count > 0 && children.value == null); }, new TimeSpan(0, 0, 0, 5));
            Assert.True(eventReceived);
            Assert.Null(children.value);
        }