Освоение Hangfire: руководство по очистке фоновых задач

Hangfire — это мощная библиотека планировщика заданий, которая позволяет легко управлять фоновыми задачами и запускать их в ваших приложениях. Однако со временем накопление выполненных или неудачных заданий в системе Hangfire может привести к проблемам с производительностью и загромождению информационных панелей. В этой статье мы рассмотрим различные методы очистки фоновых заданий Hangfire и обеспечения бесперебойной работы вашего приложения.

  1. Удаление вакансий по возрасту:

Один простой способ очистить фоновые задания Hangfire — удалить их в зависимости от их возраста. Вы можете указать пороговую продолжительность и удалить все задания старше этого срока. Вот пример использования API Hangfire:

var jobsToDelete = Hangfire.JobStorage.Current.GetConnection()
    .GetJobs()
    .Where(job => job.Value.CreatedAt < DateTime.Now.AddDays(-7));
foreach (var job in jobsToDelete)
{
    Hangfire.BackgroundJob.Delete(job.Key);
}

В этом примере мы извлекаем все задания из хранилища и отфильтровываем задания старше семи дней. Затем мы перебираем отфильтрованные задания и удаляем каждое с помощью метода Delete.

  1. Очистка завершенных заданий:

Если вы хотите удалить только завершенные задания, вы можете использовать атрибут Hangfire RecurringJobи запланированные задачи очистки. Вот пример:

[Hangfire.Daily(23, 59)]
public void CleanupCompletedJobs()
{
    var succeededJobs = Hangfire.JobStorage.Current.GetMonitoringApi()
        .SucceededJobs(0, int.MaxValue)
        .Select(x => x.Key);
    foreach (var jobId in succeededJobs)
    {
        Hangfire.BackgroundJob.Delete(jobId);
    }
}

В этом примере мы определяем повторяющееся задание, которое запускается ежедневно в 23:59. Он извлекает все выполненные задания с помощью API мониторинга Hangfire и удаляет каждое из них.

  1. Удаление просроченных заданий:

Hangfire предоставляет функцию «Истечение срока действия задания», которая позволяет автоматически удалять задания по истечении определенного периода. Вы можете установить срок действия при постановке задания в очередь. Вот пример:

var jobId = Hangfire.BackgroundJob.Enqueue(() => Console.WriteLine("Hello, Hangfire!"));
Hangfire.BackgroundJob.SetJobExpirationTimeout(jobId, TimeSpan.FromDays(30));

В этом примере мы помещаем задание в очередь и устанавливаем срок его действия на 30 дней. По истечении указанного времени Hangfire автоматически удалит задание из системы.

  1. Очистка по регулярному графику:

Вы также можете запланировать повторяющуюся задачу очистки для удаления устаревших заданий через определенные промежутки времени. Вот пример:

RecurringJob.AddOrUpdate("CleanupStaleJobs", () =>
{
    // Clean up logic here
}, Cron.Daily);

В этом примере мы определяем повторяющееся задание с именем «CleanupStaleJobs», которое выполняется каждый день. Внутри задания вы можете реализовать свою собственную логику для очистки заданий.

Очистка фоновых заданий Hangfire имеет решающее значение для поддержания оптимальной производительности и чистоты панели задач. В этой статье мы рассмотрели несколько методов достижения этой цели, включая удаление заданий по возрасту, очистку завершенных заданий, удаление заданий с истекшим сроком действия и планирование повторяющихся задач очистки. Внедрив эти методы, вы сможете поддерживать порядок в среде Hangfire и обеспечивать эффективное управление задачами.