public RabbitMQSubscribeMiddleware(
            IChannelPool channelPool,
            IRabbitMqSerializer serializer)
        {
            this.serializer  = serializer;
            this.channelPool = channelPool;

            ChannelAccessor = channelPool.Acquire(ChannelQueueName, ConnectionName);


            QueueDeclareConfiguration QueueConfiguration = new QueueDeclareConfiguration(ChannelQueueName);

            QueueConfiguration.Declare(ChannelAccessor.Channel);

            var properties = ChannelAccessor.Channel.CreateBasicProperties();

            properties.Persistent = true;



            Consumer           = new EventingBasicConsumer(ChannelAccessor.Channel);
            Consumer.Received += (model, ea) =>
            {
                var    body    = ea.Body.ToArray();
                string message = (string)serializer.Deserialize(ea.Body.ToArray(), typeof(string));
                Console.WriteLine(" [Subscribe] Received {0}", string.Format(message, DateTime.Now));
                ChannelAccessor.Channel.BasicAck(deliveryTag: ea.DeliveryTag, multiple: false);
            };

            ChannelAccessor.Channel.BasicConsume(
                queue: QueueConfiguration.QueueName,
                autoAck: false,
                consumer: Consumer
                );
        }
 public RabbitMQPublishMiddleware(
     IChannelPool channelPool,
     IRabbitMqSerializer serializer)
 {
     this.serializer  = serializer;
     this.channelPool = channelPool;
     ChannelAccessor  = channelPool.Acquire(ChannelQueueName, ConnectionName);
 }
 public RabbitBasicDemo(
     IChannelPool channelPool,
     IRabbitMqSerializer serializer,
     ILogger <RabbitBasicDemo> logger)
 {
     _logger          = logger;
     this.serializer  = serializer;
     this.channelPool = channelPool;
     ChannelAccessor  = channelPool.Acquire(ChannelQueueName, ConnectionName);
 }
        private void BindExchangeQueue(IChannelAccessor channelAccessor)
        {
            channelAccessor.Channel.QueueDeclare(
                queue: _queue.QueueName,
                durable: _queue.Durable,
                exclusive: _queue.Exclusive,
                autoDelete: _queue.AutoDelete,
                arguments: _queue.Arguments);

            if (_exchange != null)
            {
                channelAccessor.Channel.ExchangeDeclare(
                    exchange: _exchange.ExchangeName,
                    type: _exchange.Type,
                    durable: _exchange.Durable,
                    autoDelete: _exchange.AutoDelete,
                    arguments: _exchange.Arguments);

                channelAccessor.Channel.QueueBind(queue: _queue.QueueName, exchange: _exchange.ExchangeName, routingKey: _routingKey, arguments: null);
            }

            channelAccessor.Channel.BasicQos(prefetchSize: 0, prefetchCount: 1, global: false);
        }