Hangfire, как поставить все сервера на паузу?

Какой механизм есть у Hangfire, чтобы поставить на паузу все сервера (или 1, который сам будет следить за тем, что ему пора встать на паузу)?

Например: у нас есть сервис, к которому обращаются 5 hangfire серверов (отправляют http запросы), но неожиданно сервис упал на N минут и уже нет смысла отправлять туда запросы какое-то время.

Как поставить сервера на паузу, чтобы они выждали, условно говоря, 2 минуты, а потом продолжили отправлять запросы?

Единственное, что нашел: IBackgroundProcessingServer.SendStop, но Resume или Unpause нет.

В том же Quartz.NET есть scheduler.PauseAll() и scheduler.ResumeAll()

UPD: Найдено решение для 1 сервера: через JobStorage и GetMonitoringApi() + DeletedJobs(0, int.MaxValue), а затем добавить удаленные обратно, но решение не пойдет для 2+ серверов


Ответы (1 шт):

Автор решения: anonymus

Можете попробовать

  • Масштабирование обработчиков:

Вы можете изменить количество рабочих (worker'ов), которые Hangfire использует для обработки заданий, динамически масштабируя их вверх и вниз. Приостановка обработки заданий может быть реализована путем уменьшения количества рабочих до нуля.

public void ScaleDownServer(JobStorage storage)
{
    var options = new BackgroundJobServerOptions
    {
        WorkerCount = 0
    };
    
    var server = new BackgroundJobServer(options, storage);
    server.SendStop();
    
    // Чтобы возобновить обработку, создайте сервер с нужным количеством рабочих
}
→ Ссылка