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); }