コード例 #1
0
        public async Task HandleAsync(Func <Task> next, object message, object correlationContext,
                                      BasicDeliverEventArgs args)
        {
            var messageId = args.BasicProperties.MessageId;

            if (_loggerEnabled)
            {
                _logger.LogTrace($"Received a unique message with id: '{messageId}' to be processed.");
            }

            if (!await _messageProcessor.TryProcessAsync(messageId))
            {
                if (_loggerEnabled)
                {
                    _logger.LogTrace($"A unique message with id: '{messageId}' was already processed.");
                }

                return;
            }

            try
            {
                if (_loggerEnabled)
                {
                    _logger.LogTrace($"Processing a unique message with id: '{messageId}'...");
                }

                await next();

                if (_loggerEnabled)
                {
                    _logger.LogTrace($"Processed a unique message with id: '{messageId}'.");
                }
            }
            catch
            {
                if (_loggerEnabled)
                {
                    _logger.LogTrace($"There was an error when processing a unique message with id: '{messageId}'.");
                }

                await _messageProcessor.RemoveAsync(messageId);

                throw;
            }
        }