Main advantages include (but are not limited to):
- Takes care of serialization/deserialization of messages.
- Provides a neat model for dispatching messages w. handlers, polymorphic dispatch, arranging handlers in a pipeline etc.
- Handles unit of work.
- Provides a neat saga implementation.
- Gives you a host process that can be F5-debugged as well as installed as a Windows service.
These are things, that you’d need to roll yourself, if you were to use the RabbitMQ .NET client directly – unless, of course, you don’t need any of these things.
Oh, and if you use MSMQ instead of RabbitMQ, you can get all these things in a broker-less model 🙂