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)); } }
public void CreateSession() { using (ZKClient zkClient = ZKClientBuilder.NewZKClient(TestUtil.zkServers).Build()) { Console.WriteLine("conneted ok!"); } }
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); } }
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); }
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); }
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); }
public async Task Exists() { using (ZKClient zkClient = ZKClientBuilder.NewZKClient(TestUtil.zkServers).Build()) { bool e = await zkClient.ExistsAsync("/testUserNode"); //返回 true表示节点存在 ,false表示不存在 Console.WriteLine(e); } }
public async Task GetData() { using (ZKClient zkClient = ZKClientBuilder.NewZKClient(TestUtil.zkServers).Build()) { //获取 节点中的对象 User user = await zkClient.GetDataAsync <User>("/testUserNode"); Console.WriteLine(user.Name); } }
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); } }
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; }
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(); //创建实例 }
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); } }
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); } }
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; }
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; }
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)); } }
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; }
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; }
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 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); }
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)); } }
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; }
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(); } }