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:
- 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.
- When reading a message from a local queue, you might want to make sure that it is handled successfully before discarding it.
- 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)
Can anyone set me straight as to how NServiceBus does this?