C#Windows

Tour d’horizon de Hangfire

En tant que développeur, vous pouvez faire face à différents scénarios nécessitant l’utilisation de tâches en arrière-plan. Les scénarios peuvent varier: obtenir des données de sources externes ou internes (base de données, CRM, ERP, etc.), les modifier et les stocker à nouveau, ou simplement déclencher une logique personnalisée toutes les minutes, tous les jours, toutes les semaines, etc.

Donc pour ce faire, je vous propose de découvrir Hangfire, c’est un projet de niveau professionnel avec une documentation exemplaire. Autre point à mentionner, c’est Owin dans les coulisses ce qui assure sa portabilité dans tout environnement et pas seulement ASP.NET.

Vous trouverez le site du projet à l’adresse suivante : https://www.hangfire.io/

Choix d’une architecture haute disponibilité

Hangfire fonctionne en mode client/serveur, ce qui permet de séparer facilement les rôles et donc de mieux optimiser vos ressources serveur, l’autre avantage c’est que vous pouvez facilement lancer plusieurs instances de serveur afin d’améliorer la résilience de votre système.

Stockage des tâches

Hangfire nécessite un espace pour stocker, entre autres, les tâches à effectuer, leurs éventuels paramètres, leur avancement… Cet espace de stockage joue en fait le rôle de middleware entre les serveurs web qui demandent les exécutions de tâches, et les serveurs de traitement qui les exécutent.

Dans sa version gratuite, Hangfire propose un stockage des tâches sous SqlServer. Cela semble la solution la plus naturelle puisque, dans la plupart des infrastructures .Net, elle permet de tirer parti d’une infrastructure existante.

Voici les différents systèmes de stockage qui sont pris en charge par la version gratuite:

Bref vous n’avez aucune excuse pour ne pas utiliser ce produit

Démarrage rapide

Hangfire est disponible sous forme de paquet NuGet. Vous pouvez donc l’installer en utilisant la fenêtre NuGet Package Console :

PM> Install-Package Hangfire

Après l’installation, mettez à jour votre fichier de démarrage OWIN avec les lignes de code suivantes :

public void Configuration(IAppBuilder app)
{
    GlobalConfiguration.Configuration.UseSqlServerStorage("connection string");
    app.UseHangfireServer();
    app.UseHangfireDashboard();
}

Par défaut seul les accès locaux au gestionnaire des tâches sont autorisés. Pour éviter cela, vous pouvez implémenter le filtre suivant :

public class HangfireDashboardAuthorizeFilter : IDashboardAuthorizationFilter
{
    // Panel management permissions
    public bool Authorize([NotNull] DashboardContext context)
    {
        //var httpcontext = context.GetHttpContext();
        //return httpcontext.User.Identity.IsAuthenticated;
        return true;
    }
}

Il vous suffit ensuite de configurer de dashbord afin de prendre en compte ce filtre :

app.UseHangfireDashboard("/hangfire", new DashboardOptions()
{
    Authorization = new[] { new HangfireDashboardAuthorizeFilter() }
});

Démo

Parce qu’une démo vaut mieux que des mots, je vous ai alors construit un exemple comportant un serveur API et un serveur Hangfire. Le tout est bien entendu disponible sur notre Github :

Tags

Thomas ILLIET

Si le développement PowerShell était un art, vous pourriez certainement me considérer comme un artisan au sens noble du terme. Apportant un savoir-faire unique, un amour du travail bien fait et une personnalisation rendant chaque pièce produite parfaitement ciselée au besoin de son commanditaire.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Bouton retour en haut de la page
Fermer
Fermer