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