Was ist Hangfire und warum wird es benötigt?
Hangfire ist eine leistungsstarke und beliebte Bibliothek für C# (.NET), die für die Ausführung von Hintergrundaufgaben (Background Jobs) entwickelt wurde. In der modernen Webentwicklung müssen häufig Operationen ausgeführt werden, die den Hauptausführungsthread der Anwendung nicht blockieren dürfen. Beispiele hierfür sind: das Versenden von E-Mail-Benachrichtigungen, das Generieren von Berichten, die Verarbeitung hochgeladener Dateien, die Synchronisierung von Daten mit externen APIs, das Bereinigen veralteter Datenbankeinträge und vieles mehr.
Hangfire bietet eine einfache, aber flexible Möglichkeit, solche Aufgaben zu starten. Die wichtigsten Funktionen der Bibliothek sind:
- Ausführung im Hintergrund: Aufgaben werden asynchron ausgeführt, ohne die Antwort an den Benutzer zu blockieren.
- Planung: Aufgaben können nach einem Zeitplan (Cron-Ausdrücke) oder mit einer Verzögerung gestartet werden.
- Zuverlässigkeit: Hangfire speichert Informationen über Aufgaben in einem persistenten Speicher (Datenbank). Selbst wenn die Anwendung neu gestartet wird, werden unerledigte Aufgaben ausgeführt.
- Überwachung: Das integrierte Web-Dashboard ermöglicht die Überwachung des Aufgabenstatus, die Ansicht von Logs und das erneute Starten fehlgeschlagener Aufgaben.
- Wiederholungsversuche: Wenn eine Aufgabe mit einem Fehler endet, versucht Hangfire automatisch, sie erneut auszuführen (mit einer konfigurierbaren Wiederholungsrichtlinie).
- DI-Integration: Lässt sich einfach in Dependency-Injection-Container (DI) in ASP.NET Core integrieren.
Hangfire unterstützt verschiedene Speicher: SQL Server, PostgreSQL, Redis, MongoDB und andere. Dies macht es für Projekte jeder Größe geeignet – von kleinen Websites bis hin zu stark ausgelasteten Unternehmenssystemen.
Installation
Hangfire wird über den NuGet-Paketmanager installiert. Anders als in Python, wo pip install verwendet wird, kommt in der .NET-Ökosystem dotnet add package oder der Visual Studio-Paketmanager zum Einsatz.
Für die Installation des Basis-Hangfire-Pakets führen Sie folgenden Befehl im Terminal (im Stammverzeichnis Ihres Projekts) aus:
dotnet add package Hangfire
Dieser Befehl installiert den Hangfire-Kern und Abhängigkeiten für die Speicherung von Aufgaben im Arbeitsspeicher (InMemory). Für die Produktionsumgebung müssen Sie ein Paket für die jeweilige Datenbank installieren, zum Beispiel:
- SQL Server:
dotnet add package Hangfire.SqlServer - PostgreSQL:
dotnet add package Hangfire.PostgreSql - Redis:
dotnet add package Hangfire.Redis
Nach der Installation der Pakete muss Hangfire in der Datei Program.cs (für ASP.NET Core) oder Startup.cs konfiguriert werden.
Schnellstart
Betrachten wir ein minimales Beispiel für die Konfiguration und Verwendung von Hangfire in einer ASP.NET Core-Anwendung.
Schritt 1: Konfiguration in Program.cs
using Hangfire;
using Hangfire.SqlServer;
var builder = WebApplication.CreateBuilder(args);
// Hinzufügen von Hangfire mit SQL Server-Speicher
builder.Services.AddHangfire(configuration => configuration
.SetDataCompatibilityLevel(CompatibilityLevel.Version_180)
.UseSimpleAssemblyNameTypeSerializer()
.UseRecommendedSerializerSettings()
.UseSqlServerStorage(builder.Configuration.GetConnectionString("HangfireConnection")));
// Hinzufügen des Hangfire-Servers
builder.Services.AddHangfireServer();
var app = builder.Build();
// Aktivieren des Dashboards (Überwachungs-Panel)
app.UseHangfireDashboard();
// Beispiel für einen einfachen Hintergrund-Job
app.MapGet("/fire-and-forget", () =>
{
var jobId = BackgroundJob.Enqueue(() => Console.WriteLine("Hallo von Hangfire!"));
return $"Job {jobId} wurde in die Warteschlange gestellt.";
});
app.Run();
Schritt 2: Erstellen einer Aufgabe
Im obigen Beispiel haben wir die Methode BackgroundJob.Enqueue verwendet. Dies erstellt eine Aufgabe vom Typ "Fire-and-Forget".