Configure delayed retries

Component: NServiceBus
NuGet Package NServiceBus (7.2-pre)
This page targets a pre-release version and is subject to change prior to the final release.
Starting from NServiceBus version 6, the delayed retries policy (formerly known as second level retries policy) has been deprecated in favor of the new custom recoverability policy which allows more control over the recoverability behavior. This documentation shows how the previous delayed retries policies can be implemented with the new recoverability policy.
Delayed retries cannot be used when transport transactions are disabled or delayed delivery is not available. For more information about transport transactions, refer to transport transactions. For more details on the caveats, see the delayed delivery article.

Configuring delayed retries

  • TimeIncrease: Specified as a TimeSpan. Specifies the delay interval for each retry attempt. This delay increases by the same timespan with each delayed delivery. For example, if the specified value is ten seconds, i.e. 00:00:10, then the first delayed retry will be at ten seconds, the subsequent delayed retry will be twenty seconds, and so on.
  • NumberOfRetries: Number of times delayed retries are performed. Default: 3.
7.x - 7.1 NServiceBus
var recoverability = endpointConfiguration.Recoverability();
recoverability.Delayed(
    delayed =>
    {
        delayed.NumberOfRetries(2);
        delayed.TimeIncrease(TimeSpan.FromMinutes(5));
    });

Disabling through code

7.x - 7.1 NServiceBus
var recoverability = endpointConfiguration.Recoverability();
recoverability.Delayed(
    delayed =>
    {
        delayed.NumberOfRetries(0);
    });

Custom retry policy

Custom retry logic can be configured via code.

7.x - 7.1 NServiceBus
var recoverability = endpointConfiguration.Recoverability();
recoverability.CustomPolicy(MyCustomRetryPolicy);

Simple policy

The following retry policy overrides the default ten second delay interval and sets it to five seconds.

7.x - 7.1 NServiceBus
RecoverabilityAction MyCustomRetryPolicy(RecoverabilityConfig config, ErrorContext context)
{
    var action = DefaultRecoverabilityPolicy.Invoke(config, context);
    if (!(action is DelayedRetry delayedRetryAction))
    {
        return action;
    }
    // Override default delivery delay.
    return RecoverabilityAction.DelayedRetry(TimeSpan.FromSeconds(5));
}

Exception-based policy

Sometimes the number of retries or the delay interval might depend on the error exception thrown. The following retry policy extends the previous one by skipping delayed retries whenever MyBusinessException has been thrown during incoming message processing.

7.x - 7.1 NServiceBus
RecoverabilityAction MyCustomRetryPolicy(RecoverabilityConfig config, ErrorContext context)
{
    var action = DefaultRecoverabilityPolicy.Invoke(config, context);

    if (!(action is DelayedRetry delayedRetryAction))
    {
        return action;
    }
    if (context.Exception is MyBusinessException)
    {
        return RecoverabilityAction.MoveToError(config.Failed.ErrorQueue);
    }
    // Override default delivery delay.
    return RecoverabilityAction.DelayedRetry(TimeSpan.FromSeconds(5));
}

Samples


Last modified