We often get people saying they are losing messages with using the MSMQ topic...
When we investigate, they aren't. But, some things are happening that can confuse.
The number one offender for message "loss" is using two instances of the same Party Id . This is easy to do with Adapters and Connectors and Queued Topics.
The net effect of that is the message will always be delivered to one Party..It's a non mulitcasting queue under there so that makes sense..But, it can be very disconcerting when it happens because there are no errors! You've just unintentionally set up pseudo round robin processing...
The other one is more difficult to troubleshoot. If you look on the Networking tab for an Msmq Topic you see settings for Max Retry Cycles, Receive Retry Count and Retry Cycle delay. What these control are the corresponding WCF settings. Those settings by default make use of poison and retry queues.
Many times people who think they've lost a message will not have checked the retry or poison queues. I personally prefer moving to poison immediately on failure most of the time by setting retry to zero and switching Receive Error Handling from Fault to Move so that any error gets moved out of the way and put onto the poison queue.
Regardless of the choices you decide upon remember to check these queues before panicking and make sure never to choose Drop unless you really mean it!