If required, the receiving application can send a response message back to the original requester. MSMQ queues protect messages from being lost in transit and provide a place for receivers to look for messages when they are ready. Applications can use MSMQ to send messages and continue processing regardless of whether the receiving application is running or reachable over the network. The receiver may be unreachable because of a network problem, or because of natural disconnection, as in the case of mobile users that only connect to the network periodically. When applications use the transactional delivery mode in MSMQ, MSMQ also makes sure that messages are delivered exactly one time, and that messages are delivered in the order that they were sent.
MSMQ messages can contain data in any format that is understood by both the sender and the receiver.
There are many reasons why programmers may decide to use asynchronous communications. Responses are not always required and waiting for the receiver to process the request is unnecessary. The receiver may not be running at the same time as the sender. In the last example, having the option to communicate asynchronously is particularly important because synchronous communication attempts will always fail. MSMQ enables applications to send messages with delivery guarantees.