RabbitMQ

One of the transports available for Cambion uses RabbitMQ to send data between instances of Cambion. The RabbitMQ transport requires a dedicated RabbitMQ instance either hosted on a dedicated server or in the cloud. This documentation will not cover how to set up RabbitMQ as there are detailed instructions on their website.

Installation

As with other transports, the RabbitMQ transport for Cambion is also available on NuGet so you can install it using the NuGet Package Manager Console:

Install-Package Whitestone.Cambion.Transport.RabbitMQ

Usage

The RabbitMQ transport can be set up using one of the two provided extension methods to ICambionBuilder. The easiest of these uses the standard single line URI:

public void ConfigureServices(IServiceCollection services)
{
    services.AddCambion()
        .UseRabbitMqTransport("amqp://username:password@hostname/vhost");
}

When you need more control over the RabbitMQ setup you should use the extension method that overrides the default configuration with a RabbitMqConfig:

public void ConfigureServices(IServiceCollection services)
{
    services.AddCambion()
        .UseRabbitMqTransport(conf => {
            conf.Connection.Hostname = "hostname";
            conf.Connection.Username = "username";
            conf.Connection.Password = "password";
            conf.Connection.VirtualHost = "vhost";
        });
}

Additional settings

Cambion uses a pub/sub pattern, and will create a durable “fanout” exchange with auto-delete enabled by default. This exchange is named cambion.fanout.

It will also create a durable and exclusive queue with auto-delete enabled, named cambion-<Guid>, and connect this to the previously created exchange. Seeing as it has a Guid in its name the name will be unique.

The exchange/queue names and types can be configured using the extension method that overrides the default configuration. The following is a list of all possible configuration parameters:

Group

Parameter name

Required

Description

Default value

Connection

Hostname

Yes

The hostname of the RabbitMQ server

null

Username

Yes

The username needed to connect

null

Password

Yes

The password needed to connect

null

VirtualHost

No

The vhost on the RabbitMQ server

“/”

Port

No

The port that RabbitMQ listens on

5672

Exchange

Name

No

The name of the exchange

“cambion.fanout”

Type

No

Exchange type

“fanout”

Durable

No

Creates a durable exchange

true

AutoDelete

No

Exchange will be deleted when no longer in use

true

Queue

Name

No

The name of the queue

“cambion-<Guid>”

Durable

No

Creates a durable queue

true

Exclusive

No

Creates an exclusive queue

true

AutoDelete

No

Queue will be deleted when no longer in use

true

Note

The Exchange.Type must be one of RabbitMQ’s supported types: fanout, direct, headers or topic. These are subject to change.

Note

Cambion uses a pub/sub pattern. RabbitMQ recommends using a fanout exchange for this pattern, so it is recommended to leave the Exchange.Type setting to its default value.

For more detailed descriptions of these settings, refer the RabbitMQ documentation.

To use a non-durable exchange named “Cambion”, with a non-exclusive and non-durable queue named “CambionQueue”, you can use the following configuration:

public void ConfigureServices(IServiceCollection services)
{
    services.AddCambion()
        .UseRabbitMqTransport(conf => {
            conf.Connection.Hostname = "hostname";
            conf.Connection.Username = "username";
            conf.Connection.Password = "password";
            conf.Exchange.Name = "Cambion";
            conf.Exchange.Durable = false;
            conf.Queue.Name = "CambionQueue";
            conf.Queue.Exclusive = false;
            conf.Queue.Durable = false;
        });
}