🛠️ Ein großartiger Ersatz für ein wichtiges Tool
Das Modul „Kentico Schedule Task“ ist seit langem eine Kernkomponente der Kentico-Plattform und bietet Entwicklern die Möglichkeit, Prozesse zu automatisieren, Hintergrundaufgaben zu verwalten und wiederkehrende Vorgänge innerhalb ihrer Anwendungen zu planen.
Xperience by Kentico mag auf den ersten Blick dieses wichtige Modul vermissen lassen, was als potenzieller Nachteil angesehen werden könnte. Dieses Problem lässt sich jedoch durch die Verfügbarkeit beliebter Open-Source-Alternativen wie Hangfire leicht beheben.
In dieser Anleitung führe ich Sie durch den Prozess der Einrichtung von Hangfire Recurring Jobs als Ersatz für das Kentico Schedule Task-Modul.
💡 Warum habe ich Hangfire gewählt?
Hangfire ist eine beliebte Open-Source-Bibliothek, die für die Verwaltung und Ausführung von Hintergrundaufgaben in .NET-Anwendungen entwickelt wurde. Sie bietet ein robustes Framework zum Erstellen, Verarbeiten und Überwachen von Aufträgen, mit dem Entwickler zeitaufwändige Aufgaben einfach in den Hintergrund verlagern können.
Eines der herausragenden Merkmale von Hangfire ist die intuitive Dashboard-Benutzeroberfläche, die Echtzeit-Einblicke in den Job-Status bietet. Mit diesem Dashboard können Sie nicht nur laufende Aufträge überwachen, sondern auch Aufträge bei Bedarf manuell auslösen und so die Hintergrundverarbeitung Ihrer Anwendung noch besser kontrollieren und komfortabler gestalten.
Voraussetzungen
Bevor wir beginnen, stellen Sie sicher, dass Sie eine funktionierende Xperience by Kentico-Webanwendung haben, wie z.B. das Dancing Goat Template.Schritt 1: Hangfire-Pakete installieren
Wir beginnen mit der grundlegenden Einrichtung von Hangfire gemäß der Anleitung unter Hangfire - Erste Schritte.Zunächst müssen Sie die erforderlichen NuGet-Pakete zu Ihrem Projekt hinzufügen. Öffnen Sie Ihr Terminal und führen Sie die folgenden Befehle aus:
dotnet add package Hangfire.Core
dotnet add package Hangfire.SqlServer
dotnet add package Hangfire.AspNetCore
Diese Pakete enthalten alles, was Sie benötigen, um Hangfire in Ihre Xperience-Anwendung zu integrieren.
Schritt 2: Konfigurieren Sie die Hagfire-Dienste
Als nächstes müssen Sie die notwendigen Dienste registrieren. AddHangfire() richtet Warteschlangendienste ein und AddHangfireServer richtet Verarbeitungsdienste ein.
builder.Services.AddHangfire(c =>
{
// Configure SQL Server as a job storage.
c.UseSqlServerStorage(
// Obtain Kentico Database connection string.
builder.Configuration.GetConnectionString(
ConnectionHelper.ConnectionStringName));
});
// Add Hangfire Server which processes background jobs.
builder.Services.AddHangfireServer();
Schritt 3: Abbildung des Hagfire-Dashboards
Zur Überwachung und Verwaltung von Hintergrundjobs bietet Hangfire eine Dashboard-Oberfläche.Sie können die Hangfire Dashboard UI einfach durch den Aufruf von MapHangfireDashboard abbilden. Richten Sie optional eine benutzerdefinierte Autorisierungsrichtlinie ein, oder wählen Sie XperienceAdministrationAccessPolicy. Die XperienceAdministrationAccessPolicy ist eine in Xperience by Kentico integrierte Richtlinie, die sicherstellt, dass nur authentifizierte Benutzer mit Administrationszugang das Dashboard anzeigen können.
// Map Hangfire Dashboard UI and setup required authorization
app.MapHangfireDashboard(new DashboardOptions
{
Authorization = []
}).RequireAuthorization("XperienceAdministrationAccessPolicy");
Sie können optional benannte CookieAuthenticationOptions konfigurieren, um einen benutzerdefinierten Umleitungspfad für nicht autorisierte Anfragen anzugeben. Ohne diese Konfiguration werden Benutzer möglicherweise zum standardmäßigen, nicht vorhandenen Pfad /Account/Login umgeleitet.
// Setup redirect path for unauthorized requests.
builder.Services.Configure<CookieAuthenticationOptions>(
AdminIdentityConstants.APPLICATION_SCHEME,
o =>
{
o.LoginPath = "/admin/logon";
});
Schritt 4: Planen von wiederkehrenden Aufträgen
Nun, da alles eingerichtet ist, können Sie Hintergrundaufträge planen. Um z.B. eine wiederkehrende Aufgabe zu planen, müssen Sie nur IRecurringJobManager aus dem Dependency Injection Container beziehen und dessen AddOrUpdate-Methode aufrufen. Hier ist ein Beispiel für die Planung eines Auftrags, der jede Minute ausgeführt wird:
// Get IRecurringJobManager service from the application dependency injection container.
var manager = app.Services.GetRequiredService<IRecurringJobManager>();
// Configure desired schedule tasks.
manager.AddOrUpdate(
"ScheduleTasks.TestJob",
() => ScheduleTasks.TestJob(),
Cron.Minutely());
Schritt 5: Handhabung von Xperience-Datenbank-Verbindungen
Wenn Ihr Hintergrundjob über die Xperience-API mit der Xperience by Kentico-Datenbank interagiert, müssen Sie ContextUtils.ResetCurrent() aufrufen, um den Umgebungskontext zurückzusetzen, was die Erstellung einer neuen Datenbankverbindung verhindern und zu Ausnahmen führen kann, wie in der Dokumentation beschrieben.
class ScheduleTasks
{
public static async Task TestJob()
{
// Reset current thread context so each invocation gets the new one for proper handling of database connections.
ContextUtils.ResetCurrent();
// Example of a scheduled task logic - fetching user info from Kentico Xperience.
await UserInfo.Provider.Get().GetEnumerableTypedResultAsync();
// Additional logic for processing users or other tasks.
}
Fazit
Wenn Sie diese Schritte befolgen, können Sie Hangfire ganz einfach in Ihr Xperience by Kentico-Projekt integrieren und das herkömmliche Schedule Task-Modul durch eine verfügbare Open-Source-Lösung ersetzen 😊.Die vollständige Lösung finden Sie auf Github: https://github.com/BiQ-Bluesoft/xperience-by-kentico-schedule-tasks