Physical routing with MSMQ

Component: MSMQ Transport
NuGet Package NServiceBus (3.x)
Standard support for version 3.x of NServiceBus has expired. For more information see our Support Policy.

The MSMQ transport in NServiceBus is a distributed transport in which there is the MSMQ process running on each machine, with messages being stored locally before being forwarded to other machines. In this model, each endpoint connects to the local MSMQ process and, when addressing a different endpoint, not only the queue name but also the host name has to be specified.

Scaling out

Because the MSMQ queues are not accessible from outside the machine they are hosted at, NServiceBus endpoints using the MSMQ transport are unable to use the competing consumers pattern to scale out with a single shared queue.

The distributor can be used to overcome this limitation.

Physical mapping

Host name of the machine running each endpoint can be specified directly in the message-endpoint mapping configuration section by adding @machine suffix.

<configuration>
  <configSections>
    <section name="UnicastBusConfig"
             type="NServiceBus.Config.UnicastBusConfig, NServiceBus.Core"/>
  </configSections>
  <UnicastBusConfig>
    <MessageEndpointMappings>
      <add Assembly="Sales.Messages" 
           Endpoint="Sales@VM-1" />

      <add Assembly="Billing.Messages"
           Endpoint="Billing@VM-2" />
    </MessageEndpointMappings>
  </UnicastBusConfig>
</configuration>

When using MSMQ, if there is no @machine part, NServiceBus assumes the configured endpoint runs on a local machine.

Related Articles


Last modified