MSMQ maintains a type of queue called "Outgoing Queues". These queues are used by the MSMQ service to hold messages destined for servers that it cannot contact when the message is generated. These are special, temporary queues that are separate from the normal Public and Private queues.
I've recently encountered a scenario where some messages destined for the local system (i.e. the same computer that generated the message) end up in one of the "Outgoing Queues". When drilling into the Outgoing Queues with the Management Console one can see that the destination has the correct path information for the local system and the queue. In this particular scenario, the messages that are held in these "Outgoing Queues" are never delivered to the correct queue. The remain there, effectively lost.
Some messages destined for queues on the local system, including ones for the same queues listed in the "Outgoing Queues", are delivered just fine. When messages end up in the "Outgoing Queues" seems to be random. That is: some will work fine, others will not.
The queues that seem to be afflicted by this are all non-transactional. Transactional queues always seem to receive messages. At least, the application sending the message has not captured an exception for transactional queues.
What would cause MSMQ to place messages destined for queues on the local system into the "Outgoing Queues"? Is it that the MSMQ service cannot contact itself to send the message? The system is pretty busy (80%+ CPU usage). Could MSMQ be starved for resources when it does this?