🛠️ Ideální náhrada za nezbytný nástroj.
Pokud jste jako developer pracovali s Kentico, pravděpodobně jste modul Kentico Schedule Task využili. Usnadňuje podstatnou část práce, umožňuje totiž automatizovat procesy, spravovat ú lohy na pozadí a plánovat opakující se operace v rámci aplikací.
S novým Xperience by Kentico se může zdát, že budete tento klíčový modul postrádat. Tento zádrhel je ale snadno řešitelný díky dostupnosti populárních open-source alternativ, jako je Hangfire.
V tomto článku vás provedu celým procesem nastavení Hangfire Recurring Jobs jako náhradu za Kentico Schedule Task module.
💡 Proč jsem zvolil Hangfire?
Hangfire je populární open-source knihovna určená pro správu a provádění ú loh na pozadí v aplikacích .NET. Poskytuje robustní rámec pro vytváření, zpracování a monitorování ú loh a umožňuje vývojářům snadno odložit časově náročné ú lohy na pozadí.
Jednou z atraktivních funkcí Hangfire je intuitivní uživatelské rozhraní ovládacího panelu, které poskytuje přehled o stavu ú loh v reálném čase. Tento přístrojový panel umožňuje nejen sledovat probíhající ú lohy, ale také vám dává možnost ručně spouštět ú lohy na vyžádání, čímž přidává další vrstvu kontroly a pohodlí při zpracování aplikací na pozadí.
Předpoklady
Než začneme, ujistěte se, že používáte funkční Xperience by Kentico aplikaci, jako je Dancing Goat template.
1. krok: Instalace Hangfire Packages
Začneme základním nastavením Hangfire podle pokynů na stránce Hangfire - Getting started.
Nejprve je třeba do projektu přidat potřebné balíčky NuGet. Otevřete terminál a spusťte následující příkazy:
dotnet add package Hangfire.Core
dotnet add package Hangfire.SqlServer
dotnet add package Hangfire.AspNetCore
Tyto balíčky obsahují vše, co potřebujete k integraci Hangfire do vaší Xperience aplikace.
2. krok: Konfigurace Hangfire Services
Dále je třeba zaregistrovat potřebné služby. Funkce AddHangfire()
nastaví služby pro vytváření front a funkce AddHangfireServer
nastaví služby pro zpracování.
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();
3. krok: Namapujte Hangfire Dashboard
K monitorování a správě ú loh na pozadí poskytuje Hangfire dashboard UI.
Uživatelské rozhraní Hangfire Dashboard můžete jednoduše namapovat zavoláním MapHangfireDashboard
. Volitelně nastavte vlastní zásady autorizace nebo vyberte XperienceAdministrationAccessPolicy
.
// Map Hangfire Dashboard UI and setup required authorization
app.MapHangfireDashboard(new DashboardOptions
{
Authorization = []
}).RequireAuthorization("XperienceAdministrationAccessPolicy");
Volitelně můžete nakonfigurovat pojmenované CookieAuthenticationOptions, abyste zadali vlastní cestu přesměrování pro neautorizované požadavky:
// Setup redirect path for unauthorized requests.
builder.Services.Configure<CookieAuthenticationOptions>(
AdminIdentityConstants.APPLICATION_SCHEME,
o =>
{
o.LoginPath = "/admin/logon";
});
4. krok: Naplánování opakujících se ú loh
Nyní, když je vše nastaveno, můžete plánovat ú lohy na pozadí. Například pro naplánování opakující se ú lohy stačí získat IRecurringJobManager
z dependency injection containeru a zavolat metodu AddOrUpdate
.
// 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());
5. krok: Práce s databází Xperience
Když vaše ú lohy na pozadí komunikují s databází Xperience by Kentico pomocí Xperience API, musíte zavolat ContextUtils.ResetCurrent()
pro reset aktuálního kontextu. Jinak by mohlo dojít k chybám při vytváření nového DB připojení.
Viz dokumentace pro detaily.
class ScheduleTasks
{
public static async Task TestJob()
{
// Reset current thread context.
ContextUtils.ResetCurrent();
// Example of a scheduled task logic.
await UserInfo.Provider.Get().GetEnumerableTypedResultAsync();
// Additional logic...
}
}
Závěr
Podle těchto kroků můžete snadno integrovat Hangfire do svého projektu Xperience by Kentico a nahradit tradiční modul Schedule Task dostupným open-source řešením. 😊
Celé řešení najdete na Githubu: https://github.com/BiQ-Bluesoft/xperience-by-kentico-schedule-tasks