Example #1
0
        public Task AddListenerAsync(AddListenerRequest request)
        {
            if (request == null)
            {
                throw new NacosException(ConstValue.CLIENT_INVALID_PARAM, "request param invalid");
            }

            if (string.IsNullOrWhiteSpace(request.Tenant))
            {
                request.Tenant = _options.Namespace;
            }
            if (string.IsNullOrWhiteSpace(request.Group))
            {
                request.Group = ConstValue.DefaultGroup;
            }

            request.CheckParam();

            var name = BuildName(request.Tenant, request.Group, request.DataId);

            if (listeners.Any(x => x.Name.Equals(name, StringComparison.OrdinalIgnoreCase)))
            {
                _logger.LogWarning($"[add-listener] error, {name} has been added.");
                return(Task.CompletedTask);
            }

            Timer timer = new Timer(async x =>
            {
                await PollingAsync(x);
#if !DEBUG
            }, request, 0, _options.ListenInterval);
#else
            }, request, 0, _options.Interval);
        public async Task ListenerConfig_Should_Succeed()
        {
            var request = new AddListenerRequest
            {
                DataId = "dataId",
                //Group = "DEFAULT_GROUP",
                //Tenant = "tenant",
                Callbacks = new List <Action <string> >
                {
                    x => { Console.WriteLine(x); },
                }
            };

            await _configClient.AddListenerAsync(request);

            Assert.True(true);

            await Task.Delay(1000);

            var rRequest = new RemoveListenerRequest
            {
                DataId = "dataId",
            };

            await _configClient.RemoveListenerAsync(rRequest);

            await Task.Delay(50000);
        }
Example #3
0
        private async Task ConfigChangeAsync(string content, AddListenerRequest request)
        {
            // config was changed
            if (!string.IsNullOrWhiteSpace(content))
            {
                var config = await DoGetConfigAsync(new GetConfigRequest
                {
                    DataId = request.DataId,
                    Group  = request.Group,
                    Tenant = request.Tenant
                });

                // update local cache
                await _processor.SaveSnapshotAsync(request.DataId, request.Group, request.Tenant, config);

                // callback
                foreach (var cb in request.Callbacks)
                {
                    try
                    {
                        cb(config);
                    }
                    catch (Exception ex)
                    {
                        _logger.LogError(ex, $"[listener] call back throw exception, dataId={request.DataId}, group={request.Group}, tenant={request.Tenant}");
                    }
                }
            }
        }
        protected internal async Task <string> RemoteLoadAsync(string dataId, string group, bool isRefreable)
        {
            // Get client if not already set
            if (_client == null)
            {
                _client = GetNacosClient(_settings, _clientFactory, _processor, _loggerFactory);
            }

            GetConfigRequest request = new GetConfigRequest()
            {
                DataId = dataId,
                Group  = group,
            };

            if (isRefreable)
            {
                AddListenerRequest addListenerRequest = new AddListenerRequest()
                {
                    DataId = dataId, Group = group, Callbacks = new List <Action <string> > {
                        x => { AddPropertySource(Deserialize(dataId, x)); }
                    }
                };

                _client.AddListenerAsync(addListenerRequest);
            }

            Exception error = null;

            try
            {
                var result = await _client.GetConfigAsync(request);

                return(result);
            }
            catch (Exception e)
            {
                error = e;
            }


            if (error != null)
            {
                throw error;
            }

            return(string.Empty);
        }
        public override Task <AddListenerResponse> AddListener(
            AddListenerRequest request, ServerCallContext context)
        {
            if (!_targetStore.TryGetValue(request.Target.Id, out RemoteTarget target))
            {
                ErrorUtils.ThrowError(StatusCode.Internal,
                                      "Could not find target in store: " + request.Target.Id);
            }

            if (!_listenerStore.TryGetValue(request.Listener.Id, out SbListener listener))
            {
                ErrorUtils.ThrowError(StatusCode.Internal,
                                      "Could not find listener in store: " + request.Listener.Id);
            }

            uint response = target.GetBroadcaster().AddListener(listener, request.EventMask);

            return(Task.FromResult(new AddListenerResponse {
                Result = response
            }));
        }
Example #6
0
        public EventType AddListener(SbListener listener, EventType eventMask)
        {
            var request = new AddListenerRequest
            {
                Target   = grpcSbTarget,
                Listener = new GrpcSbListener {
                    Id = listener.GetId()
                },
                EventMask = (uint)eventMask
            };
            AddListenerResponse response = null;

            if (connection.InvokeRpc(() =>
            {
                response = client.AddListener(request);
            }))
            {
                return((EventType)response.Result);
            }
            return(0);
        }
Example #7
0
 private async Task <string> PollingAsync(AddListenerRequest request, long timeout)
 {
     try
     {
         var key = BuildKey(request);
         if (_configCache.TryGetValue(key, out var config))
         {
             request.Content = config;
         }
         if (string.IsNullOrWhiteSpace(request.Content))
         {
             return(string.Empty);
         }
         _logger.LogDebug($"添加日志长轮询:{key}");
         return(await _client.AddListenerAsync(request, timeout));
     }
     catch (Exception ex)
     {
         _logger.LogError(ex, $"配置监听异常:{ex.Message}");
         return(string.Empty);
     }
 }
Example #8
0
        public string AddConfig(AddListenerRequest request, Action <string> callback, int interval = 120, int timeout = 30000)
        {
            var key = BuildKey(request);

            if (_listeners.TryGetValue(key, out var listener))
            {
                listener.Callbacks.Add(callback);
                return(key);
            }

            var timer = new Timer(async sender => { await ConfigPolling(sender); },
                                  new object[] { request, interval, timeout },
                                  TimeSpan.FromSeconds(interval), Timeout.InfiniteTimeSpan);

            listener = new NacosListener(timer)
            {
                Callbacks = new List <Action <string> > {
                    callback
                }
            };
            _listeners.TryAdd(key, listener);
            return(key);
        }