Getting Started
Architecture
NServiceBus
Transports
Persistence
ServiceInsight
ServicePulse
ServiceControl
Monitoring
Samples

Connection settings

NuGet Package: NServiceBus.RabbitMQ (6.x)
Target Version: NServiceBus 7.x

The RabbitMQ transport requires a connection string to connect to the RabbitMQ broker, and there are two different styles to choose from. It can accept the standard AMQP URI connection strings, or a custom format documented below.

Specifying the connection string via code

To specify the connection string in code:

var transport = endpointConfiguration.UseTransport<RabbitMQTransport>();
transport.ConnectionString("My custom connection string");

Connection string options

Below is the list of connection string options. When constructing a connection string, these options should be separated by a semicolon.

Host

The host name of the broker.

The host name is required.

Port

The port where the broker listens.

Default: 5671 if the UseTls setting is set to true, otherwise the default value is 5672

VirtualHost

The virtual host to use.

Default: /

UserName

The user name to use to connect to the broker.

Default: guest

Password

The password to use to connect to the broker.

Default: guest

UseTls

Indicates if the connection to the broker should be secured with TLS.

Default: false

CertPath

The file path to the client authentication certificate when using TLS.

CertPassphrase

The password for the client authentication certificate specified in CertPath

RequestedHeartbeat

The interval for heartbeats between the endpoint and the broker.

Default: 60 seconds

RetryDelay

The time to wait before trying to reconnect to the broker if the connection is lost.

Type: System.TimeSpan

Default: 00:00:10 (10 seconds)

Transport Layer Security support

Secure connections to the broker using Transport Layer Security (TLS) are supported. To enable TLS support, set the UseTls setting to true in the connection string:

host=broker1;UseTls=true
TLS 1.2 must be enabled on the broker to establish a secure connection.

Client authentication

If the broker has been configured to require client authentication, a client certificate must be specified:

var transport = endpointConfiguration.UseTransport<RabbitMQTransport>();
transport.SetClientCertificate("path", "password");

This can also be done by passing a certificate in directly:

var transport = endpointConfiguration.UseTransport<RabbitMQTransport>();
transport.SetClientCertificate(new X509Certificate2());

Client certificates can also be specified using the connection string:

host=broker1;UseTls=true;CertPath=C:\CertificatePath\ssl.pfx;CertPassphrase=securePassword
If a certificate is specified via either code API, the CertPath and CertPassphrase connection string settings are ignored.

Remote certificate validation

By default, the RabbitMQ client will refuse to connect to the broker if the remote server certificate is invalid. This validation can be disabled with the following setting:

var transport = endpointConfiguration.UseTransport<RabbitMQTransport>();
transport.DisableRemoteCertificateValidation();

External authentication

By default, the broker requires a username and password to authenticate the client, but it can be configured to use other external authentication mechanisms. If the broker requires an external authentication mechanism, the client can be configured to use it with the following setting:

var transport = endpointConfiguration.UseTransport<RabbitMQTransport>();
transport.UseExternalAuthMechanism();

Controlling the prefetch count

When consuming messages from the broker, throughput can be improved by having the consumer prefetch additional messages. The prefetch count is calculated by multiplying the maximum concurrency by the prefetch multiplier. The default value of the multiplier is 3, but it can be changed as follows:

var transport = endpointConfiguration.UseTransport<RabbitMQTransport>();
transport.PrefetchMultiplier(4);

Alternatively, the whole calculation can be overridden by setting the prefetch count directly as follows:

var transport = endpointConfiguration.UseTransport<RabbitMQTransport>();
transport.PrefetchCount(100);
If the configured value is less than the maximum concurrency, the prefetch count will be set to the maximum concurrency value instead.

Controlling behavior when the broker connection is lost

The RabbitMQ transport monitors the connection to the broker and will trigger the critical error action if the connection fails and stays disconnected for the configured amount of time.

Heartbeat interval

Controls how frequently AMQP heartbeat messages are sent between the endpoint and the broker.

Type: System.TimeSpan

Default: 00:01:00 (1 minute)

var transport = endpointConfiguration.UseTransport<RabbitMQTransport>();
transport.SetHeartbeatInterval(TimeSpan.FromSeconds(30));

Network recovery interval

Controls the time to wait between attempts to reconnect to the broker if the connection is lost.

Type: System.TimeSpan

Default: 00:00:10 (10 seconds)

var transport = endpointConfiguration.UseTransport<RabbitMQTransport>();
transport.SetNetworkRecoveryInterval(TimeSpan.FromSeconds(30));

TimeToWaitBeforeTriggering

Controls the amount of time the transport waits after a failure is detected before triggering the critical error action.

Type: System.TimeSpan

Default: 00:02:00 (2 minutes)

var transport = endpointConfiguration.UseTransport<RabbitMQTransport>();
transport.TimeToWaitBeforeTriggeringCircuitBreaker(TimeSpan.FromMinutes(2));

Debugging recommendations

It can be helpful to increase the heartbeat interval to avoid connection timeouts while debugging:

var transport = endpointConfiguration.UseTransport<RabbitMQTransport>();
transport.SetHeartbeatInterval(TimeSpan.FromMinutes(10));