Отредактировано для включения ответа из комментария @ saba cc
Из моего исследования NServiceBus не поддерживает экспоненциальный возврат из коробки. Однако политика Custom Recoverability позволяет настраивать количество немедленных и отложенных повторных попыток, а также время между отложенными повторными попытками.
Поскольку NServiceBus включает число отложенных доставок, выполненных в ErrorContext Объект как DelayedDeliveriesPerformed
, мы можем включить это в расчет задержки на каждой итерации задержки.
Я предоставил приведенный ниже код для случая полупериодического исключения (InternalServerException
), которое должно иметь одну немедленную и 3 отложенные повторные попытки в экспоненциальном режиме отката.
private RecoverabilityAction RetryPolicy(RecoverabilityConfig config, ErrorContext context)
{
var delay = Math.Pow(10, context.DelayedDeliveriesPerformed);
var semiTransientConfiguration = new RecoverabilityConfig(
new ImmediateConfig(1),
new DelayedConfig(3, TimeSpan.FromSeconds(delay)),
config.Failed);
if (context.Exception is InternalServerException)
{
var action = DefaultRecoverabilityPolicy.Invoke(
semiTransientConfiguration, context);
}
return action;
}