🛠️ 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




























