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); }
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; }
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; }
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); }