Abstraction of Message Queues for DotNet

The Obvs project supports multiple message queue systems and appears to be really well designed and flexible.

Transports: ActiveMQ / RabbitMQ / NetMQ / AzureServiceBus / Kafka / EventStore Serialization: XML / JSON.Net / NetJson / ProtoBuf / MsgPack


MassTransit

https://masstransit-project.com/usage/transports/

MassTransit support multiple transports, including:

RabbitMQ
Azure Service Bus
ActiveMQ
Amazon SQS
In Memory

http://docs.masstransit-project.com/en/latest/installation/prerequisites.html

Transports MassTransit leverages existing message transports, so you will need to have a supported transport installed.

In Memory

The in memory transport is included with MassTransit. No additional software is required.

RabbitMQ

To use RabbitMQ, download and install the version appropriate for your operating system. Once the broker is installed, enable some additional plug-ins for management and message tracking.

Then, install the MassTransit.RabbitMQ package in your project and follow the RabbitMQ configuration guide.

Azure Service Bus

Azure Service Bus is a generic, cloud-based messaging system for connecting just about anything—applications, services, and devices—wherever they are. Connect apps running on Azure, on-premises systems, or both. You can even use Service Bus to connect household appliances, sensors, and other devices like tablets or phones to a central application or to each other.

To use Azure Service Bus with MassTransit, install the MassTransit.AzureServiceBus package in your project and follow the Service Bus configuration guide.

====================================

NServiceBus

It the below link dies in the future, search for "NServiceBus transports"

https://docs.particular.net/transports/types

NServiceBus transports can be divided into several categories.

Federated transports
Federated transports are inherently distributed. Each endpoint instance may connect to a different node of the queueing technology. Messages are routed transparently between the nodes but the physical routing layer needs to contain information as to which node particular endpoint is connected to.

Federated transports include:

Learning
MSMQ
Broker transports
Broker transports are inherently centralized. Even if there are multiple servers, they act as a single logical instance that hosts all the queues (and/or topics/exchanges).

Broker transports include:

Azure Service Bus
Azure Service Bus (legacy)
Azure Storage Queues
SQL Server
RabbitMQ
Unicast-only transports
Unicast-only transports do not have the notion of topics, exchanges, or similar concepts; only queues. Because of this, they allow only point-to-point communication. Sending a message to multiple receivers (e.g. publishing an event) involves of multiple transport-level sends. Unicast-only transports require subscription storage via NServiceBus persistence.

Unicast-only transports include:

Azure Storage Queues
MSMQ
SQL Server version 4 and below
Amazon SQS version 4 and below
Multicast-enabled transports
Multicast-enabled transports have some notion of topics, exchanges, or similar concepts, which allow sending a message once and having it received by multiple clients. These transports do not require subscription storage.

Multicast-enabled transports include:

Learning
Azure Service Bus
Azure Service Bus (legacy)
RabbitMQ
SQL Server version 5 and above
Amazon SQS version 5 and above

servicestack created a common interface with adapters to RabbitMQ github. You could follow this example to create adapters for other libraries.