Chybí Vám SheduleTasks v Xperience by Kentico? Integrujte Hangfire!

18. 09. 2024

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

Chcete vědět více? Položte nám otázku

Je pro nás důležitý přímý kontakt klienty. Konzultace, prezentace provádíme u nás, online nebo přímo u Vás. Neváhejte se nám ozvat s dotazem či bližší specifikací Vaší poptávky.

Petr Lebeda
Petr Lebeda Sales & Consulting Manager +420 723 484 557