Skip to content

Настройка повторов

Если при выполнении фоновой задачи возникла ошибка - Jobby может запустить её повторно. Если задача рекуррентная, то она будет запущена снова согласно расписанию. Если задача не рекуррентная - она будет запущена согласно настроенной политике повторов.

Базовая настройка

Политика повторов - это объект RetryPolicy, который содержит

  • Число с максимальным количеством попыток выполнить задачу
  • Значение пауз в секундах, которые будут сделаны между попытками повтора
csharp
var retryPolicy = new RetryPolicy
{
    // Максимальное общее количество попыток запуска задачи
    // Значение 3 значит, что если задачу не удалось выполнить
    // при первом запуске,
    // для неё будет сделано еще две попытки повтора
    MaxCount = 3,

    // Паузы между попытками запуска в случае провала задач
    // Первый повтор будет через одну секунду,
    // второй через две
    IntervalsSeconds = [1, 2]
}

// В IntervalSeconds не обязательно указывать все значения
// Например если мы хотим повторять задачу 10 раз 
// каждые 10 минут, доступен следующий вариант:
retryPolicy = new RetryPolicy
{
    MaxCount = 11,
    IntervalsSeconds = [600]
}

Политика повторов может быть глобальной (применяемой ко всем задачам) или же уникальной для конкретного типа задач. Это указывается при конфигурации библиотеки:

csharp
jobbyBuilder
    // по умолчанию будет применятся политика из объекта defaultPolicy
    .UseDefaultRetryPolicy(defaultPolicy)
    // но для задач SendEmailCommand будет применяться другая политика
    .UseRetryPolicyForJob<SendEmailCommand>(specialRetryPolicy);

Jitter

К фиксированным значениям пауз между попытками Jobby может добавлять дополниительную случайную задержку (т.н. Jitter).

Для включения этой возможности необходимо в объекте RetryPolicy заполнить список JitterMaxValuesMs, которые содержит значениям максимальной дополнительной задержки в миллисекундах для паузы между определенными попытками.

В примере ниже указана политика повторов которая после первой попытки делает паузу длиной 1 секунда + случайное значение до 100 мс, а после второй попытки - 2 секунды + случайное значение до 200 мс.

csharp
retryPolicy = new RetryPolicy
{
    MaxCount = 3,
    IntervalsSeconds = [1, 2],

    // Значения для дополнительных случайных задержек
    // в миллисекундах
    JitterMaxValuesMs = [100, 200]
}