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 the receivers are ready to receive them. Applications can use MSMQ to send messages and continue processing regardless of whether the receiving application is running or reachable over the network. The receiving application 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 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. When networks go down, receiving applications are offline, or machines containing message queues fail, MSMQ will ensure that messages get delivered as soon as connections are restored or applications and machines are restarted.