# MSMQ Transport Upgrade Version 1 to 2 ## Configuring the MSMQ transport To use the MSMQ transport for NServiceBus, create a new instance of `MsmqTransport` and pass it to `EndpointConfiguration.UseTransport`. Instead of: ```csharp var transport = endpointConfiguration.UseTransport(); transport.ConnectionString(connectionString); ``` Use: ```csharp var transport = new MsmqTransport(); endpointConfiguration.UseTransport(transport); ``` > [!NOTE] > The existing API surface with `UseTransport()` is supported via a [shim API](https://en.wikipedia.org/wiki/Shim_(computing)) to ease migration. However, it is recommended to switch to the new transport configuration API to prepare for future upgrades of NServiceBus. ## Delayed delivery Version 2 supports delayed delivery of messages by persisting them in a delayed message store. There is a built-in SQL Server-based store and an extension point for custom stores. In version 2, explicit configuration is required to enable delayed message delivery. For example: ```cs var messageStore = new SqlServerDelayedMessageStore( connectionString: "database=(local); initial catalog=my_catalog; integrated security=true", schema: "my_schema", //optional, defaults to dbo tableName: "my_delayed_messages"); //optional, defaults to endpoint name with '.delayed' suffix var transport = new MsmqTransport { DelayedDelivery = new DelayedDeliverySettings(messageStore) { NumberOfRetries = 7, MaximumRecoveryFailuresPerSecond = 2, TimeToTriggerStoreCircuitBreaker = TimeSpan.FromSeconds(20), TimeToTriggerDispatchCircuitBreaker = TimeSpan.FromSeconds(15), TimeToTriggerFetchCircuitBreaker = TimeSpan.FromSeconds(45) } }; endpointConfiguration.UseTransport(transport); ``` ```cs var messageStore = new SqlServerDelayedMessageStore( connectionString: "database=(local); initial catalog=my_catalog; integrated security=true", schema: "my_schema", //optional, defaults to dbo tableName: "my_delayed_messages"); //optional, defaults to endpoint name with '.delayed' suffix var transport = endpointConfiguration.UseTransport(); var delayedDeliverySettings = transport.NativeDelayedDelivery(messageStore); delayedDeliverySettings.NumberOfRetries = 7; delayedDeliverySettings.MaximumRecoveryFailuresPerSecond = 2; delayedDeliverySettings.TimeToTriggerStoreCircuitBreaker = TimeSpan.FromSeconds(20); delayedDeliverySettings.TimeToTriggerDispatchCircuitBreaker = TimeSpan.FromSeconds(15); delayedDeliverySettings.TimeToTriggerFetchCircuitBreaker = TimeSpan.FromSeconds(45); endpointConfiguration.DisableFeature(); ``` When upgrading from version 1 to 2, all the existing delayed messages must be migrated using the [timeout migration tool](/nservicebus/tools/migrate-to-native-delivery.md). ## Configuration options The MSMQ transport configuration options have been moved to the `MsmqTransport` class. See the following table for further information: | Version 1 configuration option | Version 2 configuration option | | --- | --- | | ApplyLabelToMessages | ApplyCustomLabelToOutgoingMessages | | TransactionScopeOptions | ConfigureTransactionScope | | UseDeadLetterQueueForMessagesWithTimeToBeReceived | UseDeadLetterQueueForMessagesWithTimeToBeReceived | | DisableInstaller | CreateQueues | | DisableDeadLetterQueueing | UseDeadLetterQueue | | DisableConnectionCachingForSends | UseConnectionCache | | UseNonTransactionalQueues | UseTransactionalQueues | | EnableJournaling | UseJournalQueue | | TimeToReachQueue | TimeToReachQueue | | DisableNativeTimeToBeReceivedInTransactions | UseNonNativeTimeToBeReceivedInTransactions | | IgnoreIncomingTimeToBeReceivedHeaders | IgnoreIncomingTimeToBeReceivedHeaders |