private void HandleMessageFromQueue(IMessage[] messages, List <HeaderInfo> headers, string queueName)
        {
            if (!messages.Any())
            {
                return;
            }

            var transportMessage = new TransportMessage
            {
                Body = messages,
                WindowsIdentityName = Thread.CurrentPrincipal.Identity.Name,
                Headers             = headers,
                ReturnAddress       = queueName
            };

            var sentMessage = new SentMessage {
                Destination = Address, Message = transportMessage
            };

            MessageReceived(sentMessage.Message);
            LocalQueue.Enqueue(sentMessage);

            while (_queueToReceiveMessagesLater.Count > 0)
            {
                MessageReceived(_queueToReceiveMessagesLater.Dequeue().Message);
            }
        }
        /// <summary>
        /// Re-queues a message for processing at another time.
        /// </summary>
        /// <param name="m">The message to process later.</param>
        /// <remarks>
        /// This method will place the message onto the back of the queue
        /// which may break message ordering.
        /// </remarks>
        public void ReceiveMessageLater(TransportMessage m)
        {
            var sentMessage = new SentMessage {
                Destination = Address, Message = m
            };

            _queueToReceiveMessagesLater.Enqueue(sentMessage);
            LocalQueue.Enqueue(sentMessage);
        }