Настройка повторов
Если при выполнении фоновой задачи возникла ошибка - Jobby может запустить её повторно. Если задача рекуррентная, то она будет запущена снова согласно расписанию. Если задача не рекуррентная - она будет запущена согласно настроенной политике повторов.
Базовая настройка
Политика повторов - это объект RetryPolicy, который содержит
- Число с максимальным количеством попыток выполнить задачу
- Значение пауз в секундах, которые будут сделаны между попытками повтора
var retryPolicy = new RetryPolicy
{
// Максимальное общее количество попыток запуска задачи
// Значение 3 значит, что если задачу не удалось выполнить
// при первом запуске,
// для неё будет сделано еще две попытки повтора
MaxCount = 3,
// Паузы между попытками запуска в случае провала задач
// Первый повтор будет через одну секунду,
// второй через две
IntervalsSeconds = [1, 2]
}
// В IntervalSeconds не обязательно указывать все значения
// Например если мы хотим повторять задачу 10 раз
// каждые 10 минут, доступен следующий вариант:
retryPolicy = new RetryPolicy
{
MaxCount = 11,
IntervalsSeconds = [600]
}Политика повторов может быть глобальной (применяемой ко всем задачам) или же уникальной для конкретного типа задач. Это указывается при конфигурации библиотеки:
jobbyBuilder
// по умолчанию будет применятся политика из объекта defaultPolicy
.UseDefaultRetryPolicy(defaultPolicy)
// но для задач SendEmailCommand будет применяться другая политика
.UseRetryPolicyForJob<SendEmailCommand>(specialRetryPolicy);Jitter
К фиксированным значениям пауз между попытками Jobby может добавлять дополниительную случайную задержку (т.н. Jitter).
Для включения этой возможности необходимо в объекте RetryPolicy заполнить список JitterMaxValuesMs, которые содержит значениям максимальной дополнительной задержки в миллисекундах для паузы между определенными попытками.
В примере ниже указана политика повторов которая после первой попытки делает паузу длиной 1 секунда + случайное значение до 100 мс, а после второй попытки - 2 секунды + случайное значение до 200 мс.
retryPolicy = new RetryPolicy
{
MaxCount = 3,
IntervalsSeconds = [1, 2],
// Значения для дополнительных случайных задержек
// в миллисекундах
JitterMaxValuesMs = [100, 200]
}