Skip to content

Improve feedback when DelayedDelivery has not been configured and delayed message features are being used #541

@timbussmann

Description

@timbussmann

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));

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions