Example #1
0
        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);
                }
            }
        }
Example #2
0
        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}");
        }
Example #3
0
        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}");
        }