/// <summary> /// 订阅节点数据变更。 /// </summary> /// <param name="path">节点路径。</param> /// <param name="listener">监听者。</param> public async Task SubscribeDataChange(string path, NodeDataChangeHandler listener) { path = GetZooKeeperPath(path); var node = GetOrAddNodeEntry(path); await node.SubscribeDataChange(listener); }
public async Task UnSubscribeTest() { var path = $"/{DateTime.Now:yyyy_MM_dd_HH_mm_ss_ff}"; var count = 0; var waitEvent = new AutoResetEvent(false); NodeDataChangeHandler handler = (client, args) => { count++; waitEvent.Set(); return(Task.CompletedTask); }; await _client.SubscribeDataChange(path, handler); await _client.CreateEphemeralAsync(path, null); waitEvent.WaitOne(10000); Assert.Equal(1, count); _client.UnSubscribeDataChange(path, handler); await _client.DeleteAsync(path); Assert.Equal(1, count); }
public async Task SubscribeDataChange(NodeDataChangeHandler listener) { _dataChangeHandler += listener; //监控数据变化 await WatchDataChange(); }
/// <summary> /// 监听指定的节点 /// </summary> /// <param name="node">节点名称</param> /// <param name="callback">节点数据更改或者节点被删除时会触发该事件</param> /// <returns>Task</returns> public Task Listen(string node, CacheCallback <string> callback) { NodeDataChangeHandler handler = null; handler = (ct, args) => { //节点被删除或者节点数据改动时清理该节点对应的缓存数据 if (args.Type == Watcher.Event.EventType.NodeDataChanged || args.Type == Watcher.Event.EventType.NodeDeleted) { if (callback != null) { callback(args.Path); } } return(Task.CompletedTask); }; NodeDataChangeHandler handlerLast = null; if (_handlerRecord.ContainsKey(node)) { handlerLast = _handlerRecord[node]; } if (handlerLast != null) { //取消侦听 _zkClient.UnSubscribeDataChange(node, handlerLast); } _handlerRecord[node] = handler; Task task = _zkClient.SubscribeDataChange(node, handler); return(task); }
/// <summary> /// 取消订阅节点数据变更。 /// </summary> /// <param name="path">节点路径。</param> /// <param name="listener">监听者。</param> public void UnSubscribeDataChange(string path, NodeDataChangeHandler listener) { path = GetZooKeeperPath(path); var node = GetOrAddNodeEntry(path); node.UnSubscribeDataChange(listener); }
public void UnSubscribeDataChange(NodeDataChangeHandler listener) { _dataChangeHandler -= listener; }
/// <summary> /// 订阅节点数据变更 /// </summary> /// <param name="path">节点路径</param> /// <param name="listener">监听者</param> public void SubscribeDataChange(string path, NodeDataChangeHandler listener) { client.SubscribeDataChange(path, listener); }