public MailConsumer(IConfigurationRoot configuration)
        {
            _rabbitMQService = new RabbitMQConnection();
            _queueName       = configuration.GetSection("RabbitMQ").GetSection("Queue").Value;

            using (var connection = _rabbitMQService.GetRabbitMQConnection(configuration))
            {
                using (var channel = connection.CreateModel())
                {
                    var consumer = new EventingBasicConsumer(channel);

                    // Received event'i sürekli listen modunda olacaktır.
                    consumer.Received += (model, ea) =>
                    {
                        var body      = ea.Body;
                        var message   = Encoding.UTF8.GetString(body);
                        var mailParam = JsonConvert.DeserializeObject <MailInput>(message);
                        var sender    = new MailSender();
                        sender.MailSend(mailParam);
                        Console.WriteLine("{0} isimli queue üzerinden gelen mesaj: \"{1}\"", _queueName, message);
                    };

                    channel.BasicConsume(_queueName, true, consumer);
                    Console.ReadLine();
                }
            }
        }
        public override void Producer(T model, string QueueRouteKey)
        {
            string mongodbMessage = "";

            try
            {
                var rabbitMQConnectionService = new RabbitMQConnection();

                using (var connection = rabbitMQConnectionService.GetRabbitMQConnection())
                {
                    using (var channel = connection.CreateModel())
                    {
                        string message = JsonConvert.SerializeObject(model);

                        mongodbMessage = "Model : " + model.GetType().Name + " # Data : " + message + " # ";

                        var publicationAddress = new PublicationAddress(ExchangeType.Topic, RabbitMQModel.Exchangename, QueueRouteKey);

                        byte[] body = Encoding.UTF8.GetBytes(message);
                        channel.BasicPublish(publicationAddress, null, body);

                        mongodbMessage += QueueRouteKey + " 'e EKLENDİ";

                        channel.Close();
                    }

                    connection.Close();
                }
            }
            catch (Exception ex)
            {
                mongodbMessage += " # ERROR : " + ex;
            }
        }
        static void Main(string[] args)
        {
            RabbitMQExtraQueueProcess QueueExtraProcess = RabbitMQExtraQueueProcess.createAsSingleton();

            Console.WriteLine("Sms Consumer");
            var rabbitMQService = new RabbitMQConnection();

            string mongodbMessage = "";

            using (var connection = rabbitMQService.GetRabbitMQConnection())
            {
                using (var channel = connection.CreateModel())
                {
                    channel.BasicQos(0, 1, false);
                    var consumer = new EventingBasicConsumer(channel);
                    consumer.Received += (model, ea) =>
                    {
                        try
                        {
                            string   message  = Encoding.UTF8.GetString(ea.Body);
                            SmsModel smsModel = JsonConvert.DeserializeObject <SmsModel>(message);

                            string phones = ListofString(smsModel.Phones);

                            mongodbMessage = "Phones : " + phones;

                            string responseResult = "";

                            SmsProcess smsProcess = SmsProcess.createAsSingleton();
                            responseResult = smsProcess.SmsSend(smsModel);

                            channel.BasicAck(ea.DeliveryTag, false);

                            mongodbMessage += " Sms Api Result : " + responseResult + " - Sms Gönderildi ve Queue'den kaldırıldı.";
                        }
                        catch (Exception ex) //Email Consumer ile aynı yol izleniyor.
                        {
                            currentRetryCount = QueueExtraProcess.GetRetryAttempts(ea.BasicProperties);

                            mongodbMessage += " - RetryCount : " + currentRetryCount + " - Hata : " + ex.ToString();

                            if (currentRetryCount < RabbitMQModel.RetryCount)
                            {
                                currentRetryCount++;

                                var properties = channel.CreateBasicProperties();
                                properties.Headers = QueueExtraProcess.CopyMessageHeaders(ea.BasicProperties.Headers);
                                QueueExtraProcess.SetRetryAttempts(properties, currentRetryCount);
                                channel.BasicPublish(ea.Exchange, ea.RoutingKey, properties, ea.Body);
                                channel.BasicAck(ea.DeliveryTag, false);
                            }
                            else
                            {
                                channel.BasicReject(ea.DeliveryTag, false);
                                mongodbMessage += currentRetryCount + " - Email Queue' den silindi";
                            }
                        }
                    };

                    channel.BasicConsume("SmsQueue", false, consumer);

                    Console.ReadLine();
                }
            }
        }
        static void Main(string[] args)
        {
            RabbitMQExtraQueueProcess QueueExtraProcess = RabbitMQExtraQueueProcess.createAsSingleton();

            Console.WriteLine("Mail Consumer");
            var rabbitMQService = new RabbitMQConnection();

            string mongodbMessage = "";

            using (var connection = rabbitMQService.GetRabbitMQConnection())
            {
                using (var channel = connection.CreateModel())
                {
                    channel.BasicQos(0, 1, false);
                    var consumer = new EventingBasicConsumer(channel);
                    consumer.Received += (model, ea) =>
                    {
                        mongodbMessage = "";
                        EmailModel emailModel = new EmailModel();

                        try
                        {
                            string message = Encoding.UTF8.GetString(ea.Body);
                            emailModel = JsonConvert.DeserializeObject <EmailModel>(message);

                            string responseResult = "";

                            MailProcess mailProcess = MailProcess.createAsSingleton();
                            responseResult = mailProcess.MailSend(emailModel);

                            channel.BasicAck(ea.DeliveryTag, false);

                            mongodbMessage += " Mail Api Result : " + responseResult + " - Mail Gönderildi ve Queue'den kaldırıldı.";
                        }
                        catch (Exception ex)
                        {
                            currentRetryCount = QueueExtraProcess.GetRetryAttempts(ea.BasicProperties);

                            mongodbMessage += " - RetryCount : " + currentRetryCount + " - Hata : " + ex.ToString();

                            if (currentRetryCount < RabbitMQModel.RetryCount)
                            {
                                currentRetryCount++;

                                var properties = channel.CreateBasicProperties();
                                properties.Headers = QueueExtraProcess.CopyMessageHeaders(ea.BasicProperties.Headers);
                                QueueExtraProcess.SetRetryAttempts(properties, currentRetryCount);
                                channel.BasicPublish(ea.Exchange, ea.RoutingKey, properties, ea.Body);
                                channel.BasicAck(ea.DeliveryTag, false);
                            }
                            else
                            {
                                channel.BasicReject(ea.DeliveryTag, false);
                                mongodbMessage += currentRetryCount + " - Email Queue' den silindi";
                            }
                        }

                        Console.WriteLine(mongodbMessage);
                        AppModel modelMongo = new AppModel
                        {
                            Name        = emailModel.Subject,
                            Description = mongodbMessage,
                            Date        = DateTime.Now
                        };
                        mongoDbService.Create(modelMongo);
                    };

                    channel.BasicConsume("EmailQueue", false, consumer);

                    Console.ReadLine();
                }
            }
        }