Using
Along with RabbitMQ, MassTransit joins the project — we talk to the broker not directly but through a bus. Consumers are declared as plain classes and registered via DI, the topology of exchanges and queues assembles itself, retry policies and error queues come out of the box.
What won me over is that the service code doesn't get tied to the transport: message contracts are just C# types, and RabbitMQ stays a configuration detail.