private async Task OnConsumerReceived(object sender, BasicDeliverEventArgs @event)
        {
            InitChannel();

            var messageBody = @event.Body.ToArray();

            try
            {
                _channel.BasicAck(@event.DeliveryTag, false);

                var spanContext = _tracer.CreateSpanContextFromHeaders(@event.BasicProperties.Headers);
                var traceId     = _tracer.ActiveSpan?.Context.TraceId;

                using (_tracer.BuildSpan(nameof(OnConsumerReceived))
                       .AddReference(References.FollowsFrom, spanContext)
                       .StartActive(true))
                    using (_logger.BeginScope(new[] { new KeyValuePair <string, object>(nameof(traceId), traceId) }))
                    {
                        var message = Encoding.UTF8.GetString(messageBody);
                        await _mediator.HandleAsync(@event.RoutingKey, message);
                    }
            }
            catch (Exception ex)
            {
                _logger.LogError(ex, "Error occurred while message processed");

                var properties = _channel.CreateBasicProperties();
                properties.ContentType  = "application/json";
                properties.DeliveryMode = 2;
                properties.Persistent   = true;

                //TODO: ExceptionHandler
                _channel.BasicPublish(_exchangeName,
                                      ErrorQueueKey,
                                      true,
                                      properties,
                                      messageBody);
            }
        }