In MSMQ esistono due modi di fare il delivery: express e recoverable. La differenza sostanziale consiste nel fatto che quando un messaggio è postato nella coda (queue.Send(...)) nel primo caso il messaggio sosterà in memoria (del PC o server), nel secondo caso in un file fisico.
Come al solito ci sono vantaggi e svantaggi in entrambe gli approcci. Nel delivery express (default con .NET) si hanno delle prestazioni estremamente superiori a fronte di una minore resilienza. Infatti basta fermare il servizio "Message Queueing" o fare reboot (che è la stessa cosa dal punto di vista del servizio) che i messaggi vengono persi. Con il delivery mode recoverable si perde in prestazioni ma essendo il messaggio persistito su file system di fatto è resiste ad eventuali reboot (non rottura di HD !).
In .NET di default si una l'express mode:
MessageQueue testQueue = new MessageQueue(queueName);
testQueue.Send("payload", "title");
testQueue.Close();
e se si vuole l'altra modalità è necessario usare la classe Message
MessageQueue testQueue = new MessageQueue(queueName);
Message msg = new Message();
msg.Label = "title";
msg.Body = "payload";
msg.Recoverable = true;
testQueue.Send(msg);
testQueue.Close();
Personalmente, usando MSMQ preferisco perdere in performances (tanto è asincrono) ma avere una maggiore resilienza.