NServiceBus vs MassTransit

If I had to summarize, here's what I'd say:

If you need commercial support, go for NServiceBus. If you're comfortable with using forums as a means of support, MassTransit is a great option. The developers have been very responsive to our issues so far. If you choose MassTransit, now you will choose between MSMQ and RabbitMQ. If you need DTC go with MSMQ. If you want more features and better administration, go with RabbitMQ.

On our project, we switched from NServiceBus to MassTransit for two reasons:

  1. MassTransit is free
  2. We love RabbitMQ

I've used both frameworks. I've used MassTransit longer than NServiceBus. Here are the highlights as I see them.

Cost:

  • MassTransit is Apache 2.0 licensed and free for commercial production use, whereas NServiceBus is not.

Support:

  • As Udi mentioned, there is an option for commercial NServiceBus support, I haven't seen that for MassTransit.

Transport:

  • MassTransit supports MSMQ and RabbitMQ
  • NServiceBus supports only MSMQ RabbitMQ is supported in NServiceBus 4+

RabbitMQ vs MSMQ:

  • MSMQ support DTC (distributed transaction coordinator) for transactions involving multiple processes on potentially multiple machines (e.g. SQL server, Windows Service)
  • RabbitMQ has an excellent Administration interface
  • MSMQ has been around longer and is a Microsoft product
  • RabbitMQ is newer, open source, free, and sponsored by VMWare
  • MSMQ is installed on most Windows machines by default

Udi Dahan and the MassTransit guys (Chris Patterson, Dru Sellers, and Travis Smith) are all brilliant people.


As the original author of NServiceBus, I'm probably a bit biased towards my own technology, but I'll try to keep this as balanced as I can.

Transport support

Both NServiceBus and MassTransit support RabbitMQ and Azure Service Bus, but NServiceBus also supports:

  • Amazon SQS
  • Azure Storage Queues
  • SQL Server (using plain tables)
  • MSMQ

On the topic of RabbitMQ

The argument could be made that NServiceBus has stronger support for RabbitMQ - for example, in its delayed delivery functionality while Mass Transit states that their "plugin is still considered as experimental. It is supported by MassTransit, but we cannot guarantee anything more than the plugin guarantees itself."

We also work very closely with the RabbitMQ team, contributing to the .net SDK for the benefit of the whole ecosystem.

When it comes to Azure Service Bus

The level of collaboration we have with the Azure Service Bus team is even higher, with over 70 PRs to their .net core SDK.

When you use NServiceBus, you benefit from the full depth of that knowledge.

Tooling

This is the biggest difference.

Once you've built a substantial system, having visibility into how all the different moving parts talk to each other becomes really important. MassTransit doesn't have much in this area beyond a small integration through a Diagnostic Source to 3rd party tools like Application Insights or Open Trace.

The Service Platform around NServiceBus goes quite a bit farther, giving you the ability to see sequence diagrams across all endpoints with ServiceInsight:

Sequence diagrams with ServiceInsight

You can also get the logical view of all of your endpoints and messages:

The logical view of an NServiceBus system

In essence, you get living documentation of your system's architecture.

Management & Monitoring

This is another area where MassTransit doesn't have very much. When a 3rd party system you're integrating with becomes unavailable and a bunch of messages in your system end up in the error queue, the only solution MassTransit has for you to manually move those messages back later using the RabbitMQ Shovel plugin.

The Service Platform around NServiceBus includes monitoring of that error queue, graphical tooling to see what the causes were of those errors, as well as the ability to replay groups of those failed messages and see that they were actually processed successfully all in a simple web app called ServicePulse.

Failed message grouping with ServicePulse

There is also visualization of health checks which are run periodically that can provide early warnings of problems before messages start failing.

And finally, there's the performance monitoring available in the platform:

NServiceBus performance monitoring

You really get the full package when it comes to production support.

Long-term support & Backwards-compatibility

While the Mass Transit folks have always been extremely good at helping anyone who has questions about it on Gitter or their Google Group, I don't think they provide bug fixes on older versions. When your production systems have been around for a couple of years, and you can't just upgrade everything all the time, that starts to be important.

With NServiceBus support includes:

  • 2+ years for each major version
  • An additional 2 years of extended support
  • Guaranteed response times on critical issues
  • 24x7 availability

Consulting & Training

From an offline perspective, there are public courses available around the world on NServiceBus as well as many consultants who can be brought on-site to kickstart a project or to assist in case of problems. I've heard from several companies that decided to switch from MassTransit to NServiceBus because they couldn't get someone on-site when they needed it.

Licensing

What some people still don't know about NServiceBus is that it is FREE for personal use and startups.

FREE for personal use and startups

When it comes to commercial use, the licensing models around NServiceBus are very flexible, as the broad spectrum of customers indicates, and can be well justified to management. Of course, with MassTransit, the licensing is free.

Hope that helps in some way.