/// <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();
        }
Example #4
0
        /// <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);
 }