﻿# Routing system extensibility points for MSMQ


## Instance mapping extensibility

To customize how logical endpoints are mapped to a physical instance when routing messages, use the following code in a [feature](/nservicebus/pipeline/features.md):

<!-- snippet: RoutingExtensibility-Instances -->

```cs
protected override void Setup(FeatureConfigurationContext context)
{
    var endpointInstances = context.Settings.Get<EndpointInstances>();
    endpointInstances.AddOrReplaceInstances("MySource",
        new List<EndpointInstance>
        {
            new EndpointInstance("MyEndpoint").AtMachine("VM-1"),
            new EndpointInstance("MyEndpoint").AtMachine("VM-2")
        });
}
```

<!-- endsnippet -->

`sourceKey` uniquely identifies the mapping source so that it can be modified and must be unique.

> [!NOTE]
> The entire source will be replaced by the code above so all known instance mappings must be added.

The instances collection is thread-safe. It allows registering multiple instance of a given endpoint. In case there is more than one mapping for a given logical endpoint, messages will be distributed based on the active [distribution strategy](/transports/msmq/sender-side-distribution.md#mapping-physical-endpoint-instances-message-distribution).
