Rebus is a free and open-source .NET service bus that makes durable messaging as easy as this:

await bus.Send(new ImportantMessage("Mjello!"));

in order to send a message, and this:

class ImportantMessageHandler : IHandleMessages<ImportantMessage>
    public async Task Handle(ImportantMessage message)
        Console.WriteLine($"Got message: {message.Text}");

in order to handle a message. The rest is configuration, which means that your application code need not touch any other part of Rebus than the two touch points shown above.

Source code and documentation

The source code for Rebus can be obtained from Rebus’ repository on GitHub, which is also where you will find the official documentation wiki.

Get the binaries

Rebus can be included in your .NET application by going

Install-Package rebus -ProjectName <your-project>

in the Package Manager Console, possibly including additional packages depending on which integrations you require.

Quick feature rundown

Rebus is capable of transporting messages using MSMQ, Azure Service Bus, Azure Storage Queues, RabbitMQ, Amazon SQS + more, and data (sagas, and maybe subscriptions) can be saved in Microsoft SQL Server/SQL Azure, MongoDB, RavenDB, and PostgreSQL.

Rebus offers a strict at-least-once-delivery guarantee, no matter which combination of message transport and state persister you choose.

More information

If you’re interested in learning how to use Rebus, I suggest you start out by reading a couple of pages on the documentation wiki. After that, you might be interested in cloning the Rebus Samples repository, and see if you can get the samples running on your machine.