public void Handle <T>()
        {
            ulong deliveryTag = 100000;

            try
            {
                var consumer = new EventingBasicConsumer(_rabbitMqchannel);
                consumer.Received += (model, ea) =>
                {
                    Logger.WriteInfo("retrieving the message from queue");
                    deliveryTag = ea.DeliveryTag;
                    var body        = ea.Body;
                    var message     = Encoding.UTF8.GetString(body);
                    var basecommand = Serializer.DeserializeObject <T>(message);
                    ProcessMessage(basecommand);
                    Logger.WriteInfo("message processed");
                    _rabbitMqchannel.BasicAck(ea.DeliveryTag, false);
                    Logger.WriteInfo("Acknowledgement sent");
                };
                var messageProperty = MessagePropertyCollection.GetMessageProperty(_key);
                _rabbitMqchannel.BasicConsume(queue: messageProperty.QueueName,
                                              noAck: false,
                                              consumer: consumer);
            }
            catch (Exception ex)
            {
                Logger.WriteError(ex.ToString());
                _rabbitMqchannel.BasicNack(deliveryTag, false, false);
                throw;
            }
        }
        public void Publish <T>(T command)
        {
            Logger.WriteInfo("trying to publish the message");
            var    commandMetaDataAttribute = command.GetType().GetCustomAttribute <CommandMetaDataAttribute>();
            var    messageProperty          = MessagePropertyCollection.GetMessageProperty(commandMetaDataAttribute.Key);
            string strcommand = Serializer.SerializeObject(command);
            var    body       = Encoding.UTF8.GetBytes(strcommand);
            var    properties = _rabbitMqchannel.CreateBasicProperties();

            properties.Persistent   = true;
            properties.DeliveryMode = 2;
            _rabbitMqchannel.BasicPublish(messageProperty.ExchangeName, messageProperty.RoutingKey, true, properties, body);
            Logger.WriteInfo("Message published");
        }