The latest version of the msmq transport requires a msmq.DelayedDelivery setting to be provided in order to make use of features that use delayed messages like
- Delayed sends (e.g.
sendOptions.DelayDeliveryWith or sendOptions.DoNotDeliverBefore)
- Delayed retries (enabled by default)
- Saga timeouts via
RequestTimeout<T>
However, there is nothing forcing users to configure delayed delivery when making use of these delayed features. This will end in unhelpful exceptions at runtime when sending delayed messages, attempting to schedule delayed retries or when requesting saga timeouts:
System.ArgumentNullException: 'Value cannot be null. Parameter name: address'
System.ArgumentNullException
HResult=0x80004003
Message=Value cannot be null.
Parameter name: address
Source=NServiceBus.Transport.Msmq
StackTrace:
at NServiceBus.Transport.Msmq.MsmqAddress.Parse(String address)
at NServiceBus.Transport.Msmq.MsmqMessageDispatcher.SendToDelayedDeliveryQueue(TransportTransaction transaction, UnicastTransportOperation transportOperation)
at NServiceBus.Transport.Msmq.MsmqMessageDispatcher.Dispatch(TransportOperations outgoingMessages, TransportTransaction transaction, CancellationToken cancellationToken)
The endpoint needs to be configured with a delayed delivery storage as documented here or all usages of delayed delivery have to be avoided/disabled, e.g.
- No delayed sends
- No Saga timeouts
- Disable delayed retries
endpointConfiguration.Recoverability().Delayed(d => d.NumberOfRetries(0));
The latest version of the msmq transport requires a
msmq.DelayedDeliverysetting to be provided in order to make use of features that use delayed messages likesendOptions.DelayDeliveryWithorsendOptions.DoNotDeliverBefore)RequestTimeout<T>However, there is nothing forcing users to configure delayed delivery when making use of these delayed features. This will end in unhelpful exceptions at runtime when sending delayed messages, attempting to schedule delayed retries or when requesting saga timeouts:
System.ArgumentNullException: 'Value cannot be null. Parameter name: address'The endpoint needs to be configured with a delayed delivery storage as documented here or all usages of delayed delivery have to be avoided/disabled, e.g.
endpointConfiguration.Recoverability().Delayed(d => d.NumberOfRetries(0));