Qu'est-ce que Hangfire et pourquoi l'utiliser ?
Hangfire est une bibliothèque puissante et populaire pour C# (.NET), conçue pour exécuter des tâches en arrière-plan (background jobs). Dans le développement web moderne, il est souvent nécessaire d'effectuer des opérations qui ne doivent pas bloquer le thread principal de l'application. Par exemple : l'envoi de notifications par email, la génération de rapports, le traitement de fichiers téléchargés, la synchronisation de données avec des API externes, le nettoyage d'enregistrements obsolètes dans la base de données, et bien plus encore.
Hangfire offre un moyen simple mais flexible de lancer ces tâches. Les fonctionnalités clés de la bibliothèque :
- Exécution en arrière-plan : Les tâches s'exécutent de manière asynchrone, sans bloquer la réponse à l'utilisateur.
- Planification : Vous pouvez lancer des tâches selon un calendrier (expressions cron) ou avec un délai.
- Fiabilité : Hangfire stocke les informations sur les tâches dans un stockage persistant (base de données). Même si l'application redémarre, les tâches non terminées seront exécutées.
- Surveillance : L'interface web intégrée (Dashboard) permet de suivre l'état des tâches, de consulter les logs et de relancer les tâches ayant échoué.
- Nouvelles tentatives : Si une tâche se termine par une erreur, Hangfire tente automatiquement de l'exécuter à nouveau (avec une politique de tentatives personnalisable).
- Intégration avec l'injection de dépendances : S'intègre facilement avec les conteneurs d'injection de dépendances (Dependency Injection) dans ASP.NET Core.
Hangfire prend en charge différents stockages : SQL Server, PostgreSQL, Redis, MongoDB, et d'autres. Cela la rend adaptée aux projets de toutes tailles, des petits sites web aux systèmes d'entreprise à forte charge.
Installation
Hangfire s'installe via le gestionnaire de packages NuGet. Contrairement à Python où l'on utilise pip install, dans l'écosystème .NET, on utilise dotnet add package ou le gestionnaire de packages Visual Studio.
Pour installer le package de base Hangfire, exécutez la commande suivante dans le terminal (dans le dossier racine de votre projet) :
dotnet add package Hangfire
Cette commande installe le noyau de Hangfire et les dépendances pour le stockage en mémoire (InMemory). Pour un environnement de production, vous devrez installer un package pour une base de données spécifique, par exemple :
- SQL Server :
dotnet add package Hangfire.SqlServer - PostgreSQL :
dotnet add package Hangfire.PostgreSql - Redis :
dotnet add package Hangfire.Redis
Après l'installation des packages, vous devez configurer Hangfire dans le fichier Program.cs (pour ASP.NET Core) ou Startup.cs.
Démarrage rapide
Examinons un exemple minimal de configuration et d'utilisation de Hangfire dans une application ASP.NET Core.
Étape 1 : Configuration dans Program.cs
using Hangfire;
using Hangfire.SqlServer;
var builder = WebApplication.CreateBuilder(args);
// Ajout de Hangfire avec le stockage SQL Server
builder.Services.AddHangfire(configuration => configuration
.SetDataCompatibilityLevel(CompatibilityLevel.Version_180)
.UseSimpleAssemblyNameTypeSerializer()
.UseRecommendedSerializerSettings()
.UseSqlServerStorage(builder.Configuration.GetConnectionString("HangfireConnection")));
// Ajout du serveur Hangfire
builder.Services.AddHangfireServer();
var app = builder.Build();
// Activation du Dashboard (tableau de bord)
app.UseHangfireDashboard();
// Exemple de tâche en arrière-plan simple
app.MapGet("/fire-and-forget", () =>
{
var jobId = BackgroundJob.Enqueue(() => Console.WriteLine("Bonjour depuis Hangfire !"));
return $"La tâche {jobId} a été mise en file d'attente.";
});
app.Run();
Étape 2 : Création d'une tâche
Dans l'exemple ci-dessus, nous avons utilisé la méthode BackgroundJob.Enqueue. Cela crée une tâche de type "Fire-and-Forget" (exécution immédiate).
Aussi dans la bibliothèque
Validation des données en JavaScript (Node.js) avec Joi et Yup
Actors Swift : guide complet avec exemples concrets
Travailler avec CSV en Java : bibliothèques OpenCSV et Apache Commons CSV
Traitement des images en Kotlin : bibliothèques et outils
Jetons JWT en Go (Golang) : bibliothèque golang-jwt et exemples d'utilisation