/// <summary>
        /// An event to receive all sended events
        /// </summary>
        private async Task Consumer_Received(object sender, BasicDeliverEventArgs eventArgs)
        {
            var eventName = eventArgs.RoutingKey;
            var message   = Encoding.UTF8.GetString(eventArgs.Body.ToArray());

            try
            {
                if (message.ToLowerInvariant().Contains("throw-fake-exception"))
                {
                    throw new InvalidOperationException($"Fake exception requested: \"{message}\"");
                }

                _logger.LogTrace("Received RabbitMQ event: {EventName}", eventName);

                if (_subscriptionsManager.HasSubscription(eventName))
                {
                    using var scope = _autofac.BeginLifetimeScope(SingeAplicationName);
                    var subscription = _subscriptionsManager.GetEventHandler(eventName);
                    var handler      = scope.ResolveOptional(subscription);
                    if (handler == null)
                    {
                        return;
                    }

                    var eventType        = _subscriptionsManager.GetEventType(eventName);
                    var integrationEvent = JsonConvert.DeserializeObject(message, eventType);
                    var concreteType     = typeof(IRabbitMQEventHandler <>).MakeGenericType(eventType);

                    await(Task) concreteType.GetMethod("Handle").Invoke(handler, new object[] { integrationEvent });
                }
                else
                {
                    _logger.LogWarning("No subscription for RabbitMQ event: {EventName}", eventName);
                }
            }
            catch (Exception ex)
            {
                _logger.LogWarning(ex, "----- ERROR Processing message \"{Message}\"", message);
            }

            _consumerChannel.BasicAck(eventArgs.DeliveryTag, multiple: false);
        }