Connection Settings

Component: SQL Server Transport
NuGet Package NServiceBus.SqlServer (1.x)
Target NServiceBus Version: 4.x
Standard support for version 4.x of NServiceBus has expired. For more information see our Support Policy.

Using connection pool

The SQL Server transport is built on top of ADO.NET and will use connection pooling. This may result in the connection pool being shared by the transport, as well as other parts of the endpoint process and the business logic.

In scenarios where the concurrent message processing limit is changed, or the database connection is used for other purposes as mentioned above, it is advisable to change the connection pool size to ensure it will not be exhausted. See also SQL Server Connection Pooling and Configuration.

Connection configuration

Connection string can be configured in several ways:

Via the App.Config

By adding a connection named NServiceBus/Transport in the connectionStrings node.

<configuration>
  <connectionStrings>
     <add name="NServiceBus/Transport"
          connectionString="Data Source=INSTANCE_NAME; Initial Catalog=some_database; Integrated Security=True"/>
  </connectionStrings>
</configuration>

Via a named connection string

By using the ConnectionStringName extension method:

var transport = configure.UseTransport<SqlServer>("MyConnectionString");

Combined this with a named connection in the connectionStrings node of the app.config file:

<configuration>
  <connectionStrings>
    <add name="MyConnectionString"
         connectionString="Data Source=INSTANCE_NAME; Initial Catalog=some_database; Integrated Security=True; Queue Schema=nsb"/>
  </connectionStrings>
</configuration>

Multiple connection strings

In multi-catalog and multi-instance modes additional configuration is required for proper message routing:

  • The sending endpoint needs to know the connection string of the receiving endpoint.
  • The replying endpoint needs to know the connection string of the originator of the message for which the reply is being sent
  • The subscribing endpoint needs to know the connection string of the publishing endpoint, in order to send subscription request.
  • The publishing endpoint needs to know the connection strings or all the subscribed endpoints

Connection strings for the remote endpoint can be configured via app.config convention. The endpoint-specific connection information can be discovered by reading the connection strings from the configuration file with NServiceBus/Transport/{name of the endpoint in the message mappings} naming convention.

Given the following mappings:

<UnicastBusConfig>
  <MessageEndpointMappings>
    <add Assembly="Billing.Contract"
         Endpoint="billing"/>
    <add Assembly="Sales.Contract"
         Endpoint="sales"/>
  </MessageEndpointMappings>
</UnicastBusConfig>

and the following connection strings:

<connectionStrings>
  <add name="NServiceBus/Transport"
       connectionString="Server=DbServerA;Database=MyDefaultDB;"/>
  <add name="NServiceBus/Transport/Billing"
       connectionString="Server=DbServerB;Database=Billing;"/>
</connectionStrings>

The messages sent to the endpoint called billing will be dispatched to the database catalog Billing on the server instance DbServerB. Because the endpoint configuration isn't specified for sales, any messages sent to the sales endpoint will be dispatched to the default database catalog and database server instance. In this example that will be MyDefaultDB on server DbServerA.

Custom database schemas

SQL Server transport uses dbo as a default schema. Default schema is used for every queue if no other schema is explicitly provided in transport address. That includes all local queues, error, audit and remote queues of other endpoints.

The default schema can be overridden via the connection string, using Queue Schema parameter:

<connectionStrings>
  <add name="NServiceBus/Transport"
       connectionString="Data Source=INSTANCE_NAME; Initial Catalog=some_database; Integrated Security=True; Queue Schema=myschema"/>
</connectionStrings>

Circuit Breaker

The SQL transport has a built in circuit breaker to handle intermittent SQL Server connectivity problems.


Last modified