private async void ProcessDeadLetters(string route, CancellationToken cancellationToken) { while (!cancellationToken.IsCancellationRequested) { try { var topics = _messageTypesCache.GetAllTopics(); foreach (var topic in topics) { var letters = await _deadLettersAgent.GetDeadLetters(route, topic, cancellationToken); foreach (var letter in letters) { await _publishingAgent.PublishToSubscriberAsync(route, topic, letter.Payload); } } return; } catch (Exception e) { _messagingLogger.Error(e, $"deadletters processing in {route}"); } finally { await Task.Delay(TimeSpan.FromSeconds(10), cancellationToken); } } }
public async Task PublishAsync <TMessage>(TMessage message) { var sw = Stopwatch.StartNew(); var topic = _topicNameProvider.Get <TMessage>(); var subscribers = await _subscriptionAgent.GetSubscribersAsync(topic); if (subscribers != null) { foreach (var subscriber in subscribers) { var payload = JsonConvert.SerializeObject(message); await _publishingAgent.PublishToSubscriberAsync(subscriber.Name, topic, payload); } await Task.Delay(10); } else { _messagingLogger.Debug($"no subsriptions for {topic}"); } _messagingLogger.Debug($"{topic} sent in {sw.ElapsedMilliseconds}"); }
public async Task PublishAsync(string topic, object message) { var sw = Stopwatch.StartNew(); var subscribers = await _subscriptionAgent.GetSubscribersAsync(topic); var payload = JsonConvert.SerializeObject(message); if (subscribers != null && subscribers.Any()) { foreach (var subscriber in subscribers) { await _publishingAgent.PublishToSubscriberAsync(subscriber.Name, topic, payload); } } else { _messagingLogger.Debug($"no subsriptions for {topic}"); await _deadLettersAgent.PublishAsync(topic, payload); } _messagingLogger.Debug($"{topic} sent in {sw.ElapsedMilliseconds}"); }