Introduction à HangFire : Traitement de tâches en arrière-plan

Vue d'ensemble

Client HangFire : Création de divers types de tâches en arrière-plan

Stockage des tâches : Persistence des informations relatives aux traitements en arrière-plan

La persistance permet aux tâches de survivre aux redémarrages d'applications ou de serveurs. C'est la différence majeure avec l'utilisation du pool de threads du CLR pour l'exécution de tâches en arrière-plan.

Serveur HangFire : Exécution dédiée des tâches

Implémenté sous forme de threads d'arrière-plan dédiés (non issus du pool de threads), le serveur récupère et traite les tâches depuis le stokcage. Il gère également le nettoyage du stockage et la suppression automatique des données anciennes. HangFire utilise des algorithmes de récupération fiables pour chaque backend de stockage, garantissant que les tâches ne sont pas perdues lors des redémarrages d'applications ou d'arrêts de processus.

Intégration de HangFire dans ASP.NET Core

Installation des paquets Nuget requis :

Hangfire.AspNetCore Hangfire.PostgreSql (pour le stockage des données dans PostgreSQL)

var optionsBaseDeDonnees = new PostgreSqlStorageOptions
{
    NomSchema = "public",
    PreparationSchemaSiNecessaire = true,
};

var chaineConnexion = Configuration.GetConnectionString("ConnexionHangfire");

services.AddHangfire(configuration =>
{
    configuration.SetNiveauCompatibilite(CompatibilityLevel.Version_180)
        .UtiliseSerialiseurNomTypeSimple()
        .UtiliseParametresSerialisationRecommandes()
        .UtiliseStockagePostgreSql(chaineConnexion, optionsBaseDeDonnees);
});
services.AjouteServeurHangfire();

app.UtiliseTableauBordHangfire();

Accéder à l'interface d'administration : http://localhost:5000/hangfire/

Exemples d'utilisation côté client

// Tâche "tirer et oublier" - exécutée une fois presque immédiatement après son déclenchement
var identifiantTache = BackgroundJob.Enqueue(() => Console.WriteLine("Tâche exécutée !"));
// Tâche différée - exécutée une fois après un délai spécifié
var identifiantTache2 = BackgroundJob.Schedule(() => Console.WriteLine("Tâche différée !"), TimeSpan.FromMinutes(5));
// Tâche récurrente basée sur une expression CRON
RecurringJob.AddOrUpdate("tachePeriodique", () => Console.WriteLine("Tâche récurrente !"), Cron.Minutely);
// Tâche de continuation - exécutée après la complétion de la tâche parente
BackgroundJob.ContinueJobWith(identifiantTache, () => Console.WriteLine("Tâche de continuation !"));

Contrôle des accès au tableau de bord HangFire

Installation du package d'authentification :

Hangfire.Dashboard.Basic.Authentication

app.UtiliseTableauBordHangfire("/hangfire", new DashboardOptions
{
    Authorization = new[]
    {
        new FiltreAuthentificationBasicPersonnalise
        {
            Utilisateur = "administrateur",
            MotDePasse = "motdepasse123"
        }
    }
});

Étiquettes: HangFire ASP.NET-Core PostgreSQL Traitement-en-arrière-plan Tâches-automatisées

Publié le 1 juillet à 00h37