public static RecoverabilityAction Invoke(RecoverabilityConfig config, ErrorContext errorContext)
{
if (errorContext.Exception is MessageDeserializationException)
{
return RecoverabilityAction.MoveToError(config.Failed.ErrorQueue);
}
if (errorContext.ImmediateProcessingFailures <= config.Immediate.MaxNumberOfRetries)
{
return RecoverabilityAction.ImmediateRetry();
}
TimeSpan delay;
if (TryGetDelay(errorContext.Message, errorContext.DelayedDeliveriesPerformed, config.Delayed, out delay))
{
return RecoverabilityAction.DelayedRetry(delay);
}
return RecoverabilityAction.MoveToError(config.Failed.ErrorQueue);
}