title: NServiceBus: Aren't MSMQ Transactions BAD?
body: <p>I am learning about NServiceBus and MSMQ.  I was told that transactional queues in MSMQ are BAD and using them is really bad for performance.  Does anyone know why?  I am guessing this comes from the notion that it uses DTC and everyone knows that the DTC is not really a scalable solution.  It seems to me that there are a couple of reasons that MSMQ with NServiceBus is not all that bad, but I don't know if I understand how it works completely.  Looking at this logically, I can think of 3 places where NServiceBus might use transactions in order to get guaranteed delivery:</p>
  
  <ol>
  <li>When sending a message across the network, you might want to use a transaction to ensure that the message has gotten to the remote queue before you discard it.</li>
  <li>When reading a message from a local queue, you might want to make sure that it is handled successfully before discarding it.</li>
  <li>When publishing a message to multiple subscribers, you might want to make sure that it reaches ALL of them before discarding it. (I really hope this is NOT what NServiceBus does)</li>
  </ol>
  
  <p>Can anyone set me straight as to how NServiceBus does this?</p>