Come lavorare con Hangfire in C #

La pianificazione dei lavori nelle applicazioni Web è una sfida ed è possibile scegliere tra molti framework per l'attività. Una popolare libreria open source, Hangfire è un framework che può essere utilizzato per la pianificazione di lavori in background in .Net.

Perché dovrei usare Hangfire?

Oggi sono disponibili molti framework di pianificazione dei lavori. Perché allora dovresti usare Hangfire invece di, diciamo, Quartz.Net, che è un altro framework popolare che è stato a lungo in uso? Bene, uno dei principali svantaggi di Quartz.Net è che ha bisogno di un servizio Windows. Al contrario, non è necessario un servizio Windows per utilizzare Hangfire nella tua applicazione. La possibilità di funzionare senza un servizio Windows rende Hangfire una buona scelta su Quartz.Net. Hangfire sfrutta la pipeline di elaborazione delle richieste di ASP.Net per l'elaborazione e l'esecuzione dei lavori.

Tieni presente che Hangfire non è limitato alle applicazioni Web; puoi anche usarlo nelle tue applicazioni console. La documentazione per Hangfire è molto dettagliata e ben strutturata e la caratteristica migliore è la sua dashboard integrata. La dashboard di Hangfire mostra informazioni dettagliate su lavori, code, stato dei lavori e così via.

Iniziare

Per creare un nuovo progetto in Visual Studio che utilizzi Hangfire, segui questi passaggi:

  1. Apri Visual Studio 2015
  2. Fare clic su File> Nuovo> Progetto
  3. Seleziona Visual C #> Web dall'elenco dei modelli di progetto visualizzati
  4. Selezionare l'applicazione Web ASP.Net dall'elenco dei modelli di progetto Web
  5. Salva il progetto con un nome

Il passaggio successivo è l'installazione e la configurazione di Hangfire nella tua applicazione; il processo è abbastanza semplice. È possibile installare Hangfire tramite NuGet Package Manager in Visual Studio. In alternativa, puoi anche utilizzare la console di Gestione pacchetti per installare la libreria Hangfire. L'installazione predefinita di Hangfire utilizza SQL Server per l'archiviazione delle informazioni di pianificazione. Inoltre, puoi installare Hangfire.Redis se utilizzi Redis invece per l'archiviazione.

Tieni presente che Hangfire archivia i tuoi lavori in un archivio permanente: devi configurare l'archiviazione prima di iniziare a utilizzare Hangfire. A tale scopo, creare un database e specificare le credenziali del database nella stringa di connessione nel file di configurazione. Non è necessario creare le tabelle nel database; Hangfire lo farà automaticamente per te. Vedremo in seguito come e quando sarà fatto.

Ora che il database è stato creato e le informazioni sulla stringa di connessione specificate nel file di configurazione dell'applicazione, il passaggio successivo consiste nel modificare il file Startup.cs e fornire le informazioni sulla stringa di connessione necessarie. Il listato di codice seguente illustra come il file Startup.cs si occupa dopo che sono stati specificati i dettagli di configurazione.

using Hangfire;

using Microsoft.Owin;

using Owin;

using System;

[assembly: OwinStartupAttribute(tipo di(HangFire.Startup))]

namespace HangFire

{

    public partial class Startup

    {

        public void Configuration(IAppBuilder app)

        {

            ConfigureAuth(app);

            GlobalConfiguration.Configuration

                .UseSqlServerStorage("DefaultConnection");

            BackgroundJob.Enqueue(() => Console.WriteLine("Getting Started with HangFire!"));

            app.UseHangfireDashboard();

            app.UseHangfireServer();

        }

    }

}

È tutto pronto. Quando esegui l'applicazione e aggiungi all'URL il suffisso "/ hangfire", puoi vedere il dashboard di Hangfire. Quando si esegue questa operazione la prima volta, viene creata una nuova tabella nel database. Le tabelle create includono AggregatedCounter, Counter, Hash, Job, JobParameter, JobQueue, List, Schema, Server, Set e State. Creare uno sfondo spara e dimentica in Hangfire è abbastanza semplice. È possibile creare un lavoro in background utilizzando il Enqueue()metodo della BackgroundJobclasse. Ecco un esempio:

BackgroundJob.Enqueue(() => Console.WriteLine("This is a fire-and-forget job that would run in the background."));

Un lavoro in background ritardato è quello che attende (per l'intervallo di ritardo), quindi viene eseguito più o meno allo stesso modo di un normale lavoro in background spara e dimentica. Il frammento di codice seguente illustra come creare un processo in background ritardato utilizzando il Schedule()metodo della BackgroundJobclasse.

BackgroundJob.Schedule(() => Console.WriteLine("This background job would execute after a delay."), TimeSpan.FromMilliseconds(1000));

Se dovessi eseguire lavori che verranno eseguiti dopo un intervallo di tempo specifico, dovresti creare lavori ricorrenti in Hangfire. Per creare un lavoro ricorrente, dovresti sfruttare la RecurringJobclasse. Tieni presente che puoi anche specificare espressioni "cron" durante la pianificazione dei lavori in Hangfire. Il seguente frammento di codice illustra come creare un lavoro ricorrente utilizzando la libreria Hangfire.

RecurringJob.AddOrUpdate(() => Console.WriteLine("This job will execute once in every minute"), Cron.Minutely);

Guarda il tutorial di Hangfire Highlighter per ulteriori informazioni.