Express and Recoverable Messaging
The sending application can specify express or recoverable messaging by setting the delivery property (PROPID_M_DELIVERY or MSMQMessage.Delivery) of each message that is sent. The choice between the two delivery options is essentially a choice between better performance with minimal resource use (express messaging) and reliability and recovery after a failure (recoverable messaging).
When express messaging is used to send messages, the messages are stored in RAM memory during routing and after delivery to the destination queue until they are received. This provides extremely fast performance, but the messages are not recoverable if any computer where the messages reside fails. Notably, this means that express messages are lost whenever the Message Queuing Service is stopped.
|When running Message Queuing in a server cluster, express messages are lost during a failover from one node to another.|
Although storing express messages in RAM provides better performance, this may also cause paging out to the disk if too many messages accumulate in RAM.
Express messages can, like recoverable messages, survive a network failure. For example, if the sending application sends express messages through a Message Queuing server, and the link between the Message Queuing server and the target computer fails, the Message Queuing server continues to store the messages in its memory. However, if the server fails before the link is restored, the express messages on the server are lost.
When recoverable messaging is used to send messages, the messages are written to disk on the sending computer and on every computer that forwards the message during routing until the message is delivered to the next computer. After delivery to the destination queue, recoverable messages are stored on disk in memory-mapped files. This makes delivery somewhat slower than express messaging, but ideal when failures cannot be tolerated or when messages remain in queues. If a computer fails or is shut down while sending messages, the messages are stored on disk. Then when the computer is restarted and the Message Queuing service restarts, the sending process is automatically resumed.
Messages are stored to disk based on a memory-mapped architecture. Performance gains can be realized by using several physical disks for the stored messages.