/// <summary>Perform receive and execute actions.</summary>
        /// <param name="consumer">The consumer.</param>
        /// <returns>True if a message was received.</returns>
        private bool DoReceiveAndExecute(BlockingQueueConsumer consumer)
        {
            var channel = consumer.Channel;

            for (var i = 0; i < this.txSize; i++)
            {
                Logger.Trace(m => m("Waiting for message from consumer."));
                var message = consumer.NextMessage(this.receiveTimeout);
                if (message == null)
                {
                    break;
                }

                try
                {
                    this.ExecuteListener(channel, message);
                }
                catch (ImmediateAcknowledgeAmqpException e)
                {
                    Logger.Trace(m => m("DoReceiveAndExecute => "), e);
                    break;
                }
                catch (Exception ex)
                {
                    consumer.RollbackOnExceptionIfNecessary(ex);
                    throw;
                }
            }

            return(consumer.CommitIfNecessary(this.IsChannelLocallyTransacted(channel)));
        }
        /// <summary>
        /// Gets the result.
        /// </summary>
        /// <param name="consumer">The consumer.</param>
        /// <returns>The result.</returns>
        /// <remarks></remarks>
        private string GetResult(BlockingQueueConsumer consumer)
        {
            var response = consumer.NextMessage(new TimeSpan(0, 0, 0, 20));
            if (response == null)
            {
                return null;
            }

            return (string)new SimpleMessageConverter().FromMessage(response);
        }
        /// <summary>
        /// Perform receive and execute actions.
        /// </summary>
        /// <param name="consumer">
        /// The consumer.
        /// </param>
        /// <returns>
        /// True if a message was received.
        /// </returns>
        private bool DoReceiveAndExecute(BlockingQueueConsumer consumer)
        {
            var channel = consumer.Channel;

            Message lastMessage = null;
            for (var i = 0; i < this.txSize; i++)
            {
                this.logger.Trace("Waiting for message from consumer.");
                var message = consumer.NextMessage(new TimeSpan(0, 0, 0, 0, (int)this.receiveTimeout));
                if (message == null)
                {
                    break;
                }

                lastMessage = message;
                try
                {
                    this.ExecuteListener(channel, message);
                }
                catch (ImmediateAcknowledgeAmqpException e)
                {
                    break;
                }
                catch (Exception ex)
                {
                    this.RollbackOnExceptionIfNecessary(channel, message, ex);
                    throw;
                }
            }

            if (lastMessage != null)
            {
                this.CommitIfNecessary(channel, lastMessage);
                return true;
            }

            return false;
        }
        /// <summary>Perform receive and execute actions.</summary>
        /// <param name="consumer">The consumer.</param>
        /// <returns>True if a message was received.</returns>
        private bool DoReceiveAndExecute(BlockingQueueConsumer consumer)
        {
            var channel = consumer.Channel;

            for (var i = 0; i < this.txSize; i++)
            {
                Logger.Trace(m => m("Waiting for message from consumer."));
                var message = consumer.NextMessage(this.receiveTimeout);
                if (message == null)
                {
                    break;
                }

                try
                {
                    this.ExecuteListener(channel, message);
                }
                catch (ImmediateAcknowledgeAmqpException e)
                {
                    Logger.Trace(m => m("DoReceiveAndExecute => "), e);
                    break;
                }
                catch (Exception ex)
                {
                    consumer.RollbackOnExceptionIfNecessary(ex);
                    throw;
                }
            }

            return consumer.CommitIfNecessary(this.IsChannelLocallyTransacted(channel));
        }