Saul  Alaniz

Saul Alaniz

1659727800

Hangfire en ASP.NET Core 3.1

En este artículo, aprendamos sobre Hangfire en ASP.NET Core 3.1 y cómo integrarlo con sus aplicaciones principales. Una tarea de programación común a la que nos enfrentamos regularmente es ejecutar trabajos en segundo plano. Y ejecutar estos trabajos correctamente sin estropear su código no es una tarea fácil, pero tampoco es difícil. Solía ​​trabajar con los servicios de Windows para programar varias tareas dentro de mi aplicación C#. Luego, me encontré con esta biblioteca casi increíble: Hangfire, y nunca me fui.

Trabajos en segundo plano en ASP.NET Core

Básicamente, los trabajos en segundo plano son aquellos métodos o funciones que pueden tardar mucho tiempo en ejecutarse (cantidad de tiempo desconocida). Estos trabajos, si se ejecutan en el subproceso principal de nuestra aplicación, pueden o no bloquear la interacción del usuario y puede parecer que nuestra aplicación .NET Core se ha bloqueado y no responde. Esto es bastante crítico para las aplicaciones orientadas al cliente. Por lo tanto, tenemos trabajos en segundo plano, similares a los subprocesos múltiples, estos trabajos se ejecutan en otro subproceso, lo que hace que nuestra aplicación parezca bastante asíncrona.

También deberíamos tener la posibilidad de programarlos en un futuro cercano para que esté completamente automatizado. La vida de un desarrollador sería muy dura sin estas increíbles posibilidades.

¿Qué es Hangfire?

Hangfire es una biblioteca de código abierto que permite a los desarrolladores programar eventos en segundo plano con la mayor facilidad. Es una biblioteca altamente flexible que ofrece varias funciones necesarias para hacer que la tarea de programación de trabajos sea pan comido. Hangfire en ASP.NET Core es la única biblioteca que no puede perderse.

Integración de Hangfire en ASP.NET Core 3.1

Para este tutorial, tengamos un escenario específico para que podamos explicar Hangfire y su potencial completo. Digamos que estamos desarrollando una API que se encarga de enviar correos al Usuario para diferentes escenarios. Tiene más sentido explicar Hangfire de esta manera. Hangfire es una de las bibliotecas más fáciles de adaptar, pero también muy poderosa. Es uno de los paquetes que ayuda por completo a crear aplicaciones de forma asíncrona y desacoplada.

Como mencioné anteriormente, Hangfire usa una base de datos para almacenar los datos del trabajo. Usaremos la base de datos del servidor MSSQL en esta demostración. Hangfire crea automáticamente las tablas requeridas durante la primera ejecución.

Configuración del proyecto ASP.NET Core

Comenzaremos creando un nuevo proyecto ASP.NET Core con la plantilla API seleccionada. Ahora cree un controlador de API vacío. Llamémoslo HangfireController. Estoy usando Visual Studio 2019 Community como mi IDE y POSTMAN para probar las API.

Instalación de los paquetes Hangfire

Instalando el único paquete que necesitarías para configurar Hangfire.

Install-Package Hangfire

Configuración de Hangfire

Una vez que haya instalado el paquete, ahora estamos listos para configurarlo para que sea compatible con nuestra aplicación ASP.NET Core API. Este es un paso bastante sencillo, además, una vez que instale el paquete, se le mostrará un Léame rápido que le muestra el paso para completar la configuración.

Navigate to Startup.cs / ConfigureServices so that it looks like the below code snippet.
public void ConfigureServices(IServiceCollection services)
{
services.AddHangfire(x => x.UseSqlServerStorage("<connection string>"));
services.AddHangfireServer();
services.AddControllers();
}

Explicación.
Línea #3 Agrega el servicio Hangfire a nuestra aplicación. También hemos mencionado el almacenamiento que se utilizará, el servidor MSSQL, junto con la cadena/nombre de conexión.
La línea n.º 4 en realidad enciende el servidor Hangfire, que es responsable del procesamiento de trabajos.

Una vez hecho esto, vayamos al método Configurar y agregue la siguiente línea.

app.UseHangfireDashboard("/mydashboard");

Explicación.
Lo que hace esta línea es que nos permite acceder al panel de hangfire en nuestra aplicación ASP.NET Core. El tablero estará disponible yendo a /URL de mi tablero. Iniciemos la aplicación.

Esquema de la base de datos Hangfire

Cuando inicia su aplicación ASP.NET Core por el momento, Hangfire verifica si tiene un esquema de Hangfire asociado disponible en su base de datos. Si no, creará un montón de tablas para ti. Así es como se vería su base de datos.

hangfire dbschema Hangfire en ASP.NET Core 3.1 - Trabajos en segundo plano simplificados

Panel de Hangfire

Después de cargar la aplicación, vaya a <localhost>/mydashboard. Podrá ver el panel de control de Hangfire.

Hangfire en ASP.NET Core

Desde el tablero podrás monitorear los trabajos y sus estados. También le permite activar manualmente los trabajos disponibles. Esta es la característica ÚNICA que diferencia a Hangfire de otros programadores. Tablero incorporado. ¿Cuan genial es eso? La captura de pantalla anterior es la de la descripción general del panel. Exploremos también las otras pestañas.

Pestaña de trabajos.

Todos los trabajos que están disponibles en el almacén de datos (nuestro servidor MSSQL) se enumerarán aquí. Obtendrá una idea completa del estado de cada trabajo (En cola, Exitoso, Procesando, Fallido, etc.) en esta pantalla.

trabajos hangfire Hangfire en ASP.NET Core 3.1 - Trabajos en segundo plano simplificados

Pestaña Reintentos.

Los trabajos tienden a fallar de vez en cuando debido a factores externos. En nuestro caso, nuestra api intenta enviar un correo al usuario, pero hay un problema de conexión interna, lo que hace que el trabajo no se ejecute. Cuando falla un trabajo, Hangfire continúa intentándolo hasta que pasa. (configurable)

hangfire vuelve a intentar Hangfire en ASP.NET Core 3.1 - Trabajos en segundo plano simplificados

Pestaña de trabajos recurrentes.

¿Qué sucede si necesita enviar por correo el uso de su factura mensualmente? Esta es la característica principal de Hangfire, trabajos recurrentes. Esta pestaña le permite monitorear todos los trabajos configurados.

hangfire recurrente Hangfire en ASP.NET Core 3.1 - Trabajos en segundo plano simplificados

Pestaña Servidores.

Recuerde, al configurar Hangfire en la clase Startup.cs, lo hemos mencionado. services.AddHangfireServer().. Esta es la pestaña donde muestra todos los Hangfire Server activos. Estos servidores son responsables de procesar los trabajos. Digamos que no ha agregado los servicios. AddHangfireServer() en la clase de inicio, aún podría agregar trabajos Hangfire a la base de datos, pero no se ejecutarán hasta que inicie un servidor Hangfire.

servidor hangfire Hangfire en ASP.NET Core 3.1 - Trabajos en segundo plano simplificados

Protección del panel Hangfire

Esta es una característica bastante obvia. Dado que el tablero puede exponer datos muy confidenciales como nombres de métodos, valores de parámetros, ID de correo electrónico, es muy importante que protejamos/restringamos este punto final. Hangfire, listo para usar, hace que el tablero sea seguro al permitir solo solicitudes locales. Sin embargo, puede cambiar esto implementando su propia versión de IDashboardAuthorizationFilter . Si ya implementó la Autorización en su API, puede implementarla para Hangfire. Consulte estos pasos para asegurar el tablero.

Tipos de trabajo en Hangfire

Los trabajos en segundo plano en ASP.NET Core (o digamos cualquier tecnología) pueden ser de muchos tipos según los requisitos. Repasemos los tipos de trabajo disponibles con Hangfire con la implementación adecuada y la explicación en nuestro proyecto ASP.NET Core API. Vamos a codificar.

Despedir y olvidar trabajos

Los trabajos de disparar y olvidar se ejecutan  solo una vez  y casi  inmediatamente  después de la creación. Crearemos nuestro primer trabajo de fondo. Abre el controlador Hangfire que habíamos creado. Crearemos un punto final POST que dé la bienvenida a un usuario con un correo electrónico (idealmente). Añade estos códigos.

[HttpPost]
[Route("welcome")]
public IActionResult Welcome(string userName)
{
var jobId = BackgroundJob.Enqueue(() => SendWelcomeMail(userName));
return Ok($"Job Id {jobId} Completed. Welcome Mail Sent!");
}

public void SendWelcomeMail(string userName)
{
//Logic to Mail the user
Console.WriteLine($"Welcome to our application, {userName}");
}

Explicación.
La línea #5 almacena JobId en una variable. Puede ver que en realidad estamos agregando un trabajo en segundo plano representado por una función ficticia SendWelcomeMail. El JobId se vuelve a publicar más tarde en el Panel de control de Hangfire. Cree la aplicación y ejecútela. Vamos a probarlo con Postman.

hangfire faf postman Hangfire en ASP.NET Core 3.1 - Trabajos en segundo plano simplificados

Tenga en cuenta la URL y cómo estoy pasando el nombre de usuario al controlador. Una vez que lo ejecute, obtendrá nuestra respuesta requerida. “Id. de trabajo 2 completado. ¡Correo de bienvenida enviado!”. Ahora veamos el tablero de Hangfire.

hangfire faf dash Hangfire en ASP.NET Core 3.1 - Trabajos en segundo plano simplificados

En la pestaña Correcto, puede ver el recuento de trabajos completados. También puede ver los detalles de cada trabajo, similar a la captura de pantalla anterior. Todos los parámetros y nombres de funciones se exponen aquí. ¿Quiere volver a ejecutar este trabajo con los mismos parámetros? Presiona el botón Volver a poner en cola. Vuelve a agregar su trabajo en la cola para que Hangfire lo procese. Sucede casi de inmediato.

Trabajos retrasados

Ahora, qué pasa si queremos enviar un correo a un usuario, no inmediatamente, sino después de 10 minutos. En tales casos, utilizamos trabajos retrasados. Veamos su implementación, después de lo cual lo explicaré en detalle. En el mismo controlador, agregue estas líneas de código. Es bastante similar a la variante anterior, pero le introducimos un factor de retraso.

[HttpPost]
[Route("delayedWelcome")]
public IActionResult DelayedWelcome(string userName)
{
var jobId = BackgroundJob.Schedule(() => SendDelayedWelcomeMail(userName),TimeSpan.FromMinutes(2));
return Ok($"Job Id {jobId} Completed. Delayed Welcome Mail Sent!");
}

public void SendDelayedWelcomeMail(string userName)
{
//Logic to Mail the user
Console.WriteLine($"Welcome to our application, {userName}");
}

Explicación.
La línea #5 programó el trabajo en un período de tiempo definido, en nuestro caso son 2 minutos. Eso significa que nuestro trabajo se ejecutará 2 minutos después de que Postman haya llamado a la acción. Abramos Postman de nuevo y probemos.

hangfire retrasó al cartero Hangfire en ASP.NET Core 3.1 - Trabajos en segundo plano simplificados

Puede ver que recibimos la respuesta esperada de Postman. Ahora. vuelva rápidamente al Panel de control de Hangfire y haga clic en la pestaña Trabajos/programados. Diría que el trabajo se ejecutará en un minuto. Ahí estás para. Ha creado su primer trabajo programado usando Hangfire con facilidad.

hangfire retraso dash Hangfire en ASP.NET Core 3.1 - Trabajos en segundo plano simplificados

trabajos recurrentes

Nuestro Cliente tiene una suscripción a nuestro servicio. Obviamente, tendríamos que enviarle un recordatorio sobre el pago o la factura en sí. Esto llama la necesidad de un trabajo recurrente, donde puedo enviar correos electrónicos a mis clientes mensualmente. Esto es compatible con Hangfire mediante el programa CRON.
¿Qué es CRON? CRON es una utilidad basada en el tiempo que puede definir intervalos de tiempo. Veamos cómo lograr tal requisito.

[HttpPost]
[Route("invoice")]
public IActionResult Invoice(string userName)
{
RecurringJob.AddOrUpdate(() => SendInvoiceMail(userName), Cron.Monthly);
return Ok($"Recurring Job Scheduled. Invoice will be mailed Monthly for {userName}!");
}

public void SendInvoiceMail(string userName)
{
//Logic to Mail the user
Console.WriteLine($"Here is your invoice, {userName}");
}

La línea #5 establece claramente que estamos tratando de agregar/actualizar un trabajo recurrente, que llama a una función tantas veces como lo define el esquema CRON. Aquí enviaremos la factura al cliente mensualmente el primer día de cada mes. Ejecutemos la aplicación y cambiemos a Postman. Estoy ejecutando este código el 24 de mayo de 2020. Según nuestro requisito, este trabajo debe despedirse el 1 de junio de 2020, que es dentro de 7 días. Vamos a ver.

hangfire cartero recurrente Hangfire en ASP.NET Core 3.1 - Trabajos en segundo plano simplificados

Entonces, esto funcionó. Pasemos a Hangfire Dashboard y vayamos a la pestaña Trabajos recurrentes.

hangfire recurrente dash Hangfire en ASP.NET Core 3.1 - Trabajos en segundo plano simplificados

¡Perfecto! Funciona como excepción. Puede pasar por varios esquemas CRON aquí que pueden coincidir con sus requisitos. Aquí hay una pequeña documentación agradable para comprender cómo se usan varias expresiones CRON.

Continuaciones

Este es un escenario más complicado. Permítanme tratar de mantenerlo muy simple. Un usuario decide darse de baja de su servicio. Después de que confirme su acción (tal vez haciendo clic en el botón para cancelar la suscripción), nosotros (la aplicación) tenemos que cancelar la suscripción del sistema y enviarle un correo de confirmación después de eso también. Entonces, el primer trabajo es realmente cancelar la suscripción del usuario. El segundo trabajo es enviar un correo confirmando la acción. El segundo trabajo debe ejecutarse solo después de que el primer trabajo se haya completado correctamente. Obtener el escenario?

[HttpPost]
[Route("unsubscribe")]
public IActionResult Unsubscribe(string userName)
{
var jobId = BackgroundJob.Enqueue(() => UnsubscribeUser(userName));
BackgroundJob.ContinueJobWith(jobId, () => Console.WriteLine($"Sent Confirmation Mail to {userName}"));
return Ok($"Unsubscribed");
}

public void UnsubscribeUser(string userName)
{
//Logic to Unsubscribe the user
Console.WriteLine($"Unsubscribed {userName}");
}

Explicación.
Línea #5 El primer trabajo que realmente contiene lógica para eliminar la suscripción del usuario.
Línea #6 Nuestro segundo trabajo que continuará después de que se ejecute el primer trabajo. Esto se hace pasando el Id. de trabajo del trabajo principal a los trabajos secundarios.

Iniciemos la aplicación y vayamos a Postman.

hangfire coont postman Hangfire en ASP.NET Core 3.1 - Trabajos en segundo plano simplificados

hangfire coont dash Hangfire en ASP.NET Core 3.1 - Trabajos en segundo plano simplificados

Ahora, vaya al Tablero y verifique el trabajo exitoso. Verá 2 nuevos trabajos ejecutados en el orden exacto que queríamos. Eso es todo por este tutorial. Espero que tengan claro estos conceptos y les resulte fácil integrar Hangfire en las aplicaciones ASP.NET Core.

Resumen

En esta guía detallada, hemos repasado los conceptos de trabajos en segundo plano, características e implementación de Hangfire en aplicaciones ASP.NET Core y varios tipos de trabajos en Hangfire. El código fuente utilizado para demostrar este tutorial está publicado en GitHub. Te dejo el enlace a continuación para que lo consultes. ¿Tienes experiencia con Hangfire? ¿Tienes alguna consulta/sugerencia? Siéntase libre de dejar a continuación en la sección de comentarios. ¡Feliz codificación!

Fuente: https://codewithmukesh.com/blog/hangfire-in-aspnet-core-3-1/

#aspdotnet #hangfire 

Hangfire en ASP.NET Core 3.1
Léon  Peltier

Léon Peltier

1659726000

Hangfire dans ASP.NET Core 3.1

Dans cet article, découvrons Hangfire dans ASP.NET Core 3.1 et comment l'intégrer à vos applications principales. Une tâche de programmation courante à laquelle nous sommes régulièrement confrontés consiste à exécuter des tâches en arrière-plan. Et exécuter ces tâches correctement sans gâcher votre code n'est pas une tâche facile, mais ce n'est pas difficile non plus. J'avais l'habitude de travailler avec les services Windows pour planifier diverses tâches dans mon application C#. Ensuite, je suis tombé sur cette bibliothèque presque géniale - Hangfire, et je ne suis jamais parti.

Tâches en arrière-plan dans ASP.NET Core

Essentiellement, les tâches en arrière-plan sont les méthodes ou fonctions qui peuvent prendre beaucoup de temps à s'exécuter (durée inconnue). Ces travaux, s'ils sont exécutés dans le thread principal de notre application, peuvent / peuvent ne pas bloquer l'interaction de l'utilisateur et peuvent donner l'impression que notre application .NET Core est bloquée et ne répond pas. Ceci est assez critique pour les applications orientées client. Par conséquent, nous avons des tâches d'arrière-plan, similaires au multithreading , ces tâches s'exécutent dans un autre thread, ce qui rend notre application assez asynchrone.

Nous devrions également avoir la possibilité de les programmer dans un futur proche afin que ce soit complètement automatisé. La vie d'un développeur serait si difficile sans ces possibilités incroyables.

Qu'est-ce qu'Hangfire ?

Hangfire est une bibliothèque open source qui permet aux développeurs de planifier des événements en arrière-plan avec la plus grande facilité. Il s'agit d'une bibliothèque très flexible offrant diverses fonctionnalités nécessaires pour faire de la tâche de planification des travaux un jeu d'enfant. Hangfire dans ASP.NET Core est la seule bibliothèque à ne pas manquer.

Intégration de Hangfire dans ASP.NET Core 3.1

Pour ce tutoriel, prenons un scénario spécifique afin que nous puissions expliquer Hangfire et son potentiel complet. Supposons que nous développions une API chargée d'envoyer des e-mails à l'utilisateur pour différents scénarios. Il est plus logique d'expliquer Hangfire de cette façon. Hangfire est l'une des bibliothèques les plus faciles à adapter, mais elle est également très puissante. C'est l'un des packages qui aide entièrement à créer des applications de manière asynchrone et découplée.

Comme je l'ai mentionné précédemment, Hangfire utilise une base de données pour stocker les données de travail. Nous utiliserons la base de données MSSQL Server dans cette démonstration. Hangfire crée automatiquement les tables requises lors de la première exécution.

Configuration du projet ASP.NET Core

Nous allons commencer par créer un nouveau projet ASP.NET Core avec le modèle d'API sélectionné. Créez maintenant un contrôleur d'API vide. Appelons-le HangfireController. J'utilise Visual Studio 2019 Community comme IDE et POSTMAN pour tester les API.

Installation des packages Hangfire

Installez le seul package dont vous auriez besoin pour configurer Hangfire.

Install-Package Hangfire

Configuration de Hangfire

Une fois que vous avez installé le package, nous sommes maintenant prêts à le configurer pour qu'il soit pris en charge par notre application API ASP.NET Core. C'est une étape assez simple, d'ailleurs une fois que vous avez installé le package, vous verrez un rapide fichier Lisez-moi qui vous montre l'étape pour terminer la configuration.

Navigate to Startup.cs / ConfigureServices so that it looks like the below code snippet.
public void ConfigureServices(IServiceCollection services)
{
services.AddHangfire(x => x.UseSqlServerStorage("<connection string>"));
services.AddHangfireServer();
services.AddControllers();
}

Explication.
Ligne #3 Ajoute le service Hangfire à notre application. Nous avons également mentionné le stockage à utiliser, MSSQL Server, ainsi que la chaîne/le nom de connexion.
Ligne #4 Lance réellement le serveur Hangfire, qui est responsable du traitement des travaux.

Une fois cela fait, passons à la méthode Configure ajouter la ligne suivante.

app.UseHangfireDashboard("/mydashboard");

Explication.
Ce que fait cette ligne, c'est qu'elle nous permet d'accéder au tableau de bord hangfire dans notre application ASP.NET Core. Le tableau de bord sera disponible en accédant à l'URL /mydashboard. Lançons l'application.

Schéma de la base de données Hangfire

Lorsque vous démarrez votre application ASP.NET Core pour le moment, Hangfire vérifie si vous avez un schéma Hangfire associé disponible dans votre base de données. Sinon, il créera un tas de tables pour vous. Voici à quoi ressemblerait votre base de données.

hangfire dbschema Hangfire dans ASP.NET Core 3.1 - Travaux d'arrière-plan simplifiés

Tableau de bord Hangfire

Après le chargement de l'application, accédez à <localhost>/mydashboard. Vous pourrez voir le tableau de bord Hangfire.

Hangfire dans ASP.NET Core

Depuis le tableau de bord, vous pourrez surveiller les travaux et leurs statuts. Il vous permet également de déclencher manuellement les tâches disponibles. Il s'agit de la fonctionnalité ONE qui distingue Hangfire des autres planificateurs. Tableau de bord intégré. À quel point cela est cool? La capture d'écran ci-dessus est celle de l'aperçu du tableau de bord. Explorons également les autres onglets.

Onglet Emplois.

Tous les emplois disponibles dans le magasin de données (notre serveur MSSQL) seront répertoriés ici. Vous aurez une idée complète de l'état de chaque travail (En file d'attente, Réussi, Traitement, Échec, etc.) sur cet écran.

hangfire jobs Hangfire dans ASP.NET Core 3.1 - Tâches d'arrière-plan simplifiées

Onglet Nouvelles tentatives.

Les emplois ont tendance à échouer de temps en temps en raison de facteurs externes. Dans notre cas, notre API essaie d'envoyer un mail à l'utilisateur, mais il y a un problème de connexion interne, qui fait échouer l'exécution de la tâche. Lorsqu'une tâche échoue, Hangfire continue de la réessayer jusqu'à ce qu'elle réussisse. (paramétrable)

hangfire réessaie Hangfire dans ASP.NET Core 3.1 - Tâches d'arrière-plan simplifiées

Onglet Travaux récurrents.

Que se passe-t-il si vous avez besoin de poster l'utilisation de sa facture sur une base mensuelle. C'est la fonctionnalité principale de Hangfire, les tâches récurrentes. Cet onglet vous permet de surveiller tous les travaux configurés.

hangfire récurrent Hangfire dans ASP.NET Core 3.1 - Tâches d'arrière-plan simplifiées

Onglet Serveurs.

Rappelez-vous, lors de la configuration de Hangfire dans la classe Startup.cs, nous l'avons mentionné. services.AddHangfireServer().. C'est l'onglet où il montre tous les serveurs Hangfire actifs. Ces serveurs sont responsables du traitement des travaux. Supposons que vous n'ayez pas ajouté les services.AddHangfireServer() dans la classe de démarrage, vous pourrez toujours ajouter des travaux Hangfire à la base de données, mais ils ne seront pas exécutés tant que vous n'aurez pas lancé un serveur Hangfire.

serveur hangfire Hangfire dans ASP.NET Core 3.1 - Travaux d'arrière-plan simplifiés

Sécurisation du tableau de bord Hangfire

C'est une caractéristique assez évidente. Étant donné que le tableau de bord peut exposer des données très sensibles telles que les noms de méthodes, les valeurs de paramètres, les identifiants de messagerie, il est très important que nous sécurisions/restreignions ce point de terminaison. Hangfire, prêt à l'emploi, sécurise le tableau de bord en n'autorisant que les requêtes locales. Cependant, vous pouvez changer cela en implémentant votre propre version de IDashboardAuthorizationFilter . Si vous avez déjà implémenté l'autorisation dans votre API, vous pouvez l'implémenter pour Hangfire. Reportez-vous à ces étapes pour sécuriser le tableau de bord.

Types d'emplois dans Hangfire

Les tâches d'arrière-plan dans ASP.NET Core (ou, disons, n'importe quelle technologie) peuvent être de plusieurs types en fonction des exigences. Passons en revue les types de travaux disponibles avec Hangfire avec une implémentation et des explications appropriées sur notre projet d'API ASP.NET Core. Passons au codage.

Emplois à feu et à oublier

Les tâches Fire-and-Forget ne sont exécutées  qu'une seule fois  et presque  immédiatement  après leur création. Nous allons créer notre premier Job en arrière-plan. Ouvrez le Hangfire Controller que nous avions créé. Nous allons créer un point de terminaison POST qui accueille un utilisateur avec un email (idéalement). Ajoutez ces codes.

[HttpPost]
[Route("welcome")]
public IActionResult Welcome(string userName)
{
var jobId = BackgroundJob.Enqueue(() => SendWelcomeMail(userName));
return Ok($"Job Id {jobId} Completed. Welcome Mail Sent!");
}

public void SendWelcomeMail(string userName)
{
//Logic to Mail the user
Console.WriteLine($"Welcome to our application, {userName}");
}

Explication.
La ligne #5 stocke le JobId dans une variable. Vous pouvez voir que nous ajoutons en fait un travail en arrière-plan représenté par une fonction factice SendWelcomeMail. Le JobId est ensuite publié sur le tableau de bord Hangfire. Générez l'application et exécutez-la. Testons-le avec Postman.

hangfire faf postman Hangfire dans ASP.NET Core 3.1 - Travaux d'arrière-plan simplifiés

Notez l'URL et comment je transmets le nom d'utilisateur au contrôleur. Une fois que vous l'exécutez, vous obtiendrez notre réponse requise. « ID de travail 2 terminé. Message de bienvenue envoyé !". Vérifions maintenant le tableau de bord Hangfire.

hangfire faf dash Hangfire dans ASP.NET Core 3.1 - Travaux d'arrière-plan simplifiés

Sous l'onglet Réussite, vous pouvez voir le nombre de travaux terminés. Vous pouvez également voir les détails de chaque tâche, comme dans la capture d'écran ci-dessus. Tous les paramètres et noms de fonction sont exposés ici. Voulez-vous exécuter à nouveau cette tâche avec les mêmes paramètres ? Appuyez sur le bouton Remettre en file d'attente. Il rajoute votre travail dans la file d'attente pour que Hangfire le traite. Cela arrive presque immédiatement.

Tâches retardées

Maintenant, que se passe-t-il si nous voulons envoyer un e-mail à un utilisateur, pas immédiatement, mais après 10 minutes. Dans de tels cas, nous utilisons des Jobs retardés. Voyons sa mise en œuvre après quoi je vous expliquerai en détail. Dans le même contrôleur, ajoutez ces lignes de code. Elle est assez similaire à la variante précédente, mais nous y introduisons un facteur de retard.

[HttpPost]
[Route("delayedWelcome")]
public IActionResult DelayedWelcome(string userName)
{
var jobId = BackgroundJob.Schedule(() => SendDelayedWelcomeMail(userName),TimeSpan.FromMinutes(2));
return Ok($"Job Id {jobId} Completed. Delayed Welcome Mail Sent!");
}

public void SendDelayedWelcomeMail(string userName)
{
//Logic to Mail the user
Console.WriteLine($"Welcome to our application, {userName}");
}

Explication.
La ligne #5 a planifié le travail sur une période définie, dans notre cas, il s'agit de 2 minutes. Cela signifie que notre tâche sera exécutée 2 minutes après que l'action a été appelée par Postman. Ouvrons à nouveau Postman et testons.

hangfire facteur retardé Hangfire dans ASP.NET Core 3.1 - Travaux d'arrière-plan simplifiés

Vous pouvez voir que nous recevons la réponse attendue de Postman. À présent. revenez rapidement au tableau de bord Hangfire et cliquez sur l'onglet Jobs/Scheduled. Cela signifierait que le travail s'exécutera dans une minute. Voilà pour. Vous avez créé votre première tâche planifiée en utilisant facilement Hangfire.

hangfire delay dash Hangfire dans ASP.NET Core 3.1 - Tâches d'arrière-plan simplifiées

Emplois récurrents

Notre client a un abonnement à notre service. Nous devrons évidemment lui envoyer un rappel concernant le paiement ou la facture elle-même. Cela appelle le besoin d'un travail récurrent, où je peux envoyer des e-mails à mes clients sur une base mensuelle. Ceci est pris en charge dans Hangfire en utilisant le calendrier CRON.
CRON, qu'est-ce que c'est ? CRON est un utilitaire basé sur le temps qui peut définir des intervalles de temps. Voyons comment répondre à une telle exigence.

[HttpPost]
[Route("invoice")]
public IActionResult Invoice(string userName)
{
RecurringJob.AddOrUpdate(() => SendInvoiceMail(userName), Cron.Monthly);
return Ok($"Recurring Job Scheduled. Invoice will be mailed Monthly for {userName}!");
}

public void SendInvoiceMail(string userName)
{
//Logic to Mail the user
Console.WriteLine($"Here is your invoice, {userName}");
}

La ligne 5 indique clairement que nous essayons d'ajouter/de mettre à jour un travail récurrent, qui appelle une fonction autant de fois que défini par le schéma CRON. Ici, nous enverrons la facture au client sur une base mensuelle le premier de chaque mois. Exécutons l'application et passons à Postman. J'exécute ce code le 24 mai 2020. Selon nos exigences, ce travail devrait être licencié le 1er juin 2020, soit dans 7 jours. Laisse voir.

hangfire facteur récurrent Hangfire dans ASP.NET Core 3.1 - Travaux d'arrière-plan simplifiés

Donc, cela a fonctionné. Passons au tableau de bord Hangfire et accédez à l'onglet Tâches récurrentes.

tableau de bord récurrent hangfire Hangfire dans ASP.NET Core 3.1 - Tâches d'arrière-plan simplifiées

Parfait! Fonctionne comme excepté. Vous pouvez parcourir ici différents schémas CRON qui peuvent correspondre à vos besoins. Voici une petite documentation sympa pour comprendre les différentes expressions CRON et son utilisation.

Suite

C'est un scénario plus compliqué. Permettez-moi d'essayer de rester très simple. Un utilisateur décide de se désabonner de votre service. Après qu'il ait confirmé son action (peut-être en cliquant sur le bouton de désinscription), nous (l'application) devons le désinscrire du système et lui envoyer un e-mail de confirmation après cela également. Ainsi, le premier travail consiste à désinscrire l'utilisateur. La deuxième tâche consiste à envoyer un e-mail confirmant l'action. Le deuxième travail ne doit être exécuté qu'une fois le premier travail terminé correctement. Obtenir le scénario ?

[HttpPost]
[Route("unsubscribe")]
public IActionResult Unsubscribe(string userName)
{
var jobId = BackgroundJob.Enqueue(() => UnsubscribeUser(userName));
BackgroundJob.ContinueJobWith(jobId, () => Console.WriteLine($"Sent Confirmation Mail to {userName}"));
return Ok($"Unsubscribed");
}

public void UnsubscribeUser(string userName)
{
//Logic to Unsubscribe the user
Console.WriteLine($"Unsubscribed {userName}");
}

Explication.
Ligne #5 Le premier travail qui contient réellement des logiques pour supprimer l'abonnement de l'utilisateur.
Ligne #6 Notre deuxième travail qui se poursuivra après l'exécution du premier travail. Cela se fait en transmettant l'ID de travail du travail parent aux travaux enfants.

Lançons l'application et allons à Postman.

hangfire coont postman Hangfire dans ASP.NET Core 3.1 - Travaux d'arrière-plan simplifiés

hangfire coont dash Hangfire dans ASP.NET Core 3.1 - Travaux d'arrière-plan simplifiés

Maintenant, allez dans le tableau de bord et vérifiez le travail réussi. Vous verrez 2 nouveaux travaux exécutés dans l'ordre exact que nous voulions. C'est tout pour ce tutoriel. J'espère que vous comprenez clairement ces concepts et que vous trouvez facile d'intégrer Hangfire dans les applications ASP.NET Core.

Sommaire

Dans ce guide détaillé, nous avons passé en revue les concepts de travaux d'arrière-plan, de fonctionnalités et d'implémentation de Hangfire dans les applications ASP.NET Core et divers types de travaux dans Hangfire. Le code source utilisé pour illustrer ce didacticiel est publié sur GitHub. Je vous laisse le lien ci-dessous pour vous y référer. Avez-vous de l'expérience avec Hangfire? Avez-vous des questions/suggestions ? N'hésitez pas à laisser ci-dessous dans la section des commentaires. Bon codage !

Source : https://codewithmukesh.com/blog/hangfire-in-aspnet-core-3-1/

#aspdotnet #hangfire 

Hangfire dans ASP.NET Core 3.1
Hoang  Ha

Hoang Ha

1659723180

Hangfire trong ASP.NET Core 3.1

Trong bài viết này, hãy cùng tìm hiểu về Hangfire trong ASP.NET Core 3.1 và cách tích hợp nó với các Ứng dụng cốt lõi của bạn. Một nhiệm vụ lập trình phổ biến mà chúng ta phải đối mặt thường xuyên là chạy các công việc trong nền. Và chạy những công việc này đúng cách mà không làm rối mã của bạn không phải là một nhiệm vụ dễ dàng nhưng cũng không khó. Tôi đã từng làm việc với các dịch vụ Windows để lên lịch các tác vụ khác nhau trong ứng dụng C # của mình. Sau đó, tôi bắt gặp thư viện gần như tuyệt vời này - Hangfire, và tôi đã không bao giờ rời đi.

Công việc cơ bản trong ASP.NET Core

Về cơ bản, công việc nền là những phương thức hoặc chức năng có thể mất rất nhiều thời gian để thực thi (khoảng thời gian không xác định). Những công việc này nếu chạy trong chuỗi chính của ứng dụng của chúng tôi, có thể / không chặn tương tác của người dùng và có thể có vẻ như Ứng dụng .NET Core của chúng tôi đã bị treo và không phản hồi. Điều này khá quan trọng đối với các ứng dụng giao diện người dùng. Do đó, chúng ta có các công việc nền, tương tự như đa luồng, các công việc này chạy trong một luồng khác, làm cho ứng dụng của chúng tôi có vẻ khá không đồng bộ.

Chúng tôi cũng nên có khả năng lên lịch cho chúng trong tương lai gần để nó hoàn toàn tự động. Cuộc sống của một nhà phát triển sẽ rất khó khăn nếu không có những khả năng tuyệt vời này.

Hangfire là gì?

Hangfire là một thư viện nguồn mở cho phép các nhà phát triển lên lịch các sự kiện trong nền một cách dễ dàng nhất. Nó là một thư viện rất linh hoạt cung cấp các tính năng khác nhau cần thiết để làm cho nhiệm vụ lập lịch công việc trở nên đơn giản. Hangfire trong ASP.NET Core là một thư viện mà bạn không thể bỏ qua.

Tích hợp Hangfire trong ASP.NET Core 3.1

Đối với hướng dẫn này, hãy có một kịch bản cụ thể để chúng tôi có thể giải thích Hangfire và nó hoàn toàn có tiềm năng. Giả sử chúng tôi đang phát triển một API chịu trách nhiệm gửi thư cho Người dùng trong các tình huống khác nhau. Sẽ có ý nghĩa hơn khi giải thích Hangfire theo cách này. Hangfire là một trong những thư viện dễ thích nghi nhất, nhưng cũng là một trong những thư viện rất mạnh mẽ. Nó là một trong những gói hoàn toàn giúp xây dựng các ứng dụng theo cách khử khớp nối không đồng bộ.

Như tôi đã đề cập trước đó, Hangfire sử dụng cơ sở dữ liệu để lưu trữ Dữ liệu công việc. Chúng tôi sẽ sử dụng Cơ sở dữ liệu máy chủ MSSQL trong phần trình diễn này. Hangfire tự động tạo các bảng cần thiết trong lần chạy đầu tiên.

Thiết lập Dự án cốt lõi ASP.NET

Chúng ta sẽ bắt đầu bằng cách tạo một Dự án cốt lõi ASP.NET mới với Mẫu API được chọn. Bây giờ hãy tạo một Bộ điều khiển API trống. Hãy gọi nó là HangfireController. Tôi đang sử dụng Cộng đồng Visual Studio 2019 làm IDE và POSTMAN của mình để kiểm tra các API.

Cài đặt các Gói Hangfire

Cài đặt gói duy nhất bạn cần để thiết lập Hangfire.

Install-Package Hangfire

Định cấu hình Hangfire

Sau khi bạn đã cài đặt gói, bây giờ chúng tôi đã sẵn sàng định cấu hình gói để được ứng dụng ASP.NET Core API của chúng tôi hỗ trợ. Đây là một bước khá đơn giản, bên cạnh đó khi bạn cài đặt gói, bạn sẽ được hiển thị một Readme nhanh cho bạn biết bước để hoàn tất cấu hình.

Navigate to Startup.cs / ConfigureServices so that it looks like the below code snippet.
public void ConfigureServices(IServiceCollection services)
{
services.AddHangfire(x => x.UseSqlServerStorage("<connection string>"));
services.AddHangfireServer();
services.AddControllers();
}

Giải trình.
Dòng # 3 Thêm dịch vụ Hangfire vào ứng dụng của chúng tôi. Chúng tôi cũng đã đề cập đến Storage sẽ được sử dụng, MSSQL Server, cùng với chuỗi / tên kết nối.
Dòng # 4 Trên thực tế Kích hoạt Máy chủ Hangfire, máy chủ này chịu trách nhiệm xử lý công việc.

Khi điều đó được thực hiện, chúng ta hãy đi đến cấu hình phương pháp thêm dòng sau.

app.UseHangfireDashboard("/mydashboard");

Giải trình.
Dòng này có chức năng gì, Nó cho phép chúng tôi truy cập bảng điều khiển hangfire trong Ứng dụng cốt lõi ASP.NET của chúng tôi. Trang tổng quan sẽ có sẵn bằng cách truy cập URL / mydashboard. Hãy khởi động ứng dụng.

Lược đồ cơ sở dữ liệu Hangfire

Khi bạn khởi động Ứng dụng cốt lõi ASP.NET, Hangfire sẽ kiểm tra xem bạn có sẵn một Lược đồ Hangfire được liên kết trong cơ sở dữ liệu của mình hay không. Nếu không, Nó sẽ tạo ra một loạt các bảng cho bạn. Đây là cách cơ sở dữ liệu của bạn trông như thế nào.

hangfire dbschema Hangfire trong ASP.NET Core 3.1 - Công việc nền được thực hiện dễ dàng

Bảng điều khiển Hangfire

Sau khi tải ứng dụng, điều hướng đến <localhost> / mydashboard. Bạn sẽ có thể xem bảng điều khiển Hangfire.

Hangfire trong ASP.NET Core

Từ bảng điều khiển, bạn sẽ có thể theo dõi các công việc và trạng thái của chúng. Nó cũng cho phép bạn kích hoạt các công việc có sẵn theo cách thủ công. Đây là tính năng DUY NHẤT giúp Hangfire khác biệt với các Bộ lập lịch khác. Bảng điều khiển tích hợp. Làm thế nào là thú vị? Ảnh chụp màn hình ở trên là tổng quan về Trang tổng quan. Hãy cùng khám phá các tab khác.

Tab Công việc.

Tất cả các công việc có sẵn trong kho dữ liệu (Máy chủ MSSQL của chúng tôi) sẽ được liệt kê ở đây. Bạn sẽ có một ý tưởng đầy đủ về trạng thái của từng công việc (Đã kết thúc, Đã thành công, Đang xử lý, Không thành công, v.v.) trên màn hình này.

công việc hangfire Hangfire trong ASP.NET Core 3.1 - Công việc nền được thực hiện dễ dàng

Tab Thử lại.

Công việc có xu hướng thất bại một lần trong một thời gian do các yếu tố bên ngoài. Trong trường hợp của chúng tôi, api của chúng tôi cố gắng gửi thư đến người dùng, nhưng có sự cố kết nối nội bộ khiến công việc không thể thực hiện được. Khi một công việc không thành công, Hangfire tiếp tục thử lại cho đến khi nó vượt qua. (có thể định cấu hình)

hangfire thử lại Hangfire trong ASP.NET Core 3.1 - Công việc nền được thực hiện dễ dàng

Tab Công việc Định kỳ.

Điều gì sẽ xảy ra nếu bạn cần gửi hóa đơn sử dụng qua thư hàng tháng. Đây là tính năng cốt lõi của Hangfire, các công việc định kỳ. Tab này cho phép bạn theo dõi tất cả các công việc đã định cấu hình.

hangfire định kỳ Hangfire trong ASP.NET Core 3.1 - Công việc nền được thực hiện dễ dàng

Tab Máy chủ.

Hãy nhớ rằng, trong khi định cấu hình Hangfire trong lớp Startup.cs, chúng tôi đã đề cập. services.AddHangfireServer () .. Đây là tab nơi nó hiển thị tất cả Máy chủ Hangfire đang hoạt động. Các máy chủ này có nhiệm vụ xử lý các công việc. Giả sử, bạn chưa thêm services.AddHangfireServer () trong lớp Khởi động, bạn vẫn có thể thêm Công việc Hangfire vào Cơ sở dữ liệu, nhưng chúng sẽ không được thực thi cho đến khi bạn kích hoạt Máy chủ Hangfire.

máy chủ hangfire Hangfire trong ASP.NET Core 3.1 - Công việc nền được thực hiện dễ dàng

Bảo mật Bảng điều khiển Hangfire

Đây là một tính năng khá rõ ràng. Vì trang tổng quan có thể hiển thị dữ liệu rất nhạy cảm như tên phương thức, giá trị tham số, id email, nên điều quan trọng là chúng tôi phải bảo mật / hạn chế điểm cuối này. Hangfire, ra khỏi hộp giúp trang tổng quan an toàn bằng cách chỉ cho phép các yêu cầu cục bộ. Tuy nhiên, bạn có thể thay đổi điều này bằng cách triển khai phiên bản IDashboardAuthorizationFilter của riêng bạn . Nếu bạn đã triển khai Ủy quyền trong API của mình, bạn có thể triển khai Ủy quyền cho Hangfire. Tham khảo các bước sau để bảo mật trang tổng quan.

Các loại công việc trong Hangfire

Cơ sở Công việc trong ASP.NET Core (hoặc nói bất kỳ công nghệ nào) có thể có nhiều loại tùy thuộc vào yêu cầu. Hãy xem qua các Loại công việc có sẵn với Hangfire với cách triển khai và giải thích phù hợp về Dự án API cốt lõi ASP.NET của chúng tôi. Hãy viết mã.

Công việc có thể quên được

Các công việc ghi và quên  chỉ được thực hiện một lần  và gần như  ngay lập tức  sau khi tạo. Chúng tôi sẽ tạo Công việc nền đầu tiên của chúng tôi. Mở Bộ điều khiển Hangfire mà chúng tôi đã tạo. Chúng tôi sẽ tạo một điểm cuối POST chào đón người dùng có email (lý tưởng là). Thêm vào các mã này.

[HttpPost]
[Route("welcome")]
public IActionResult Welcome(string userName)
{
var jobId = BackgroundJob.Enqueue(() => SendWelcomeMail(userName));
return Ok($"Job Id {jobId} Completed. Welcome Mail Sent!");
}

public void SendWelcomeMail(string userName)
{
//Logic to Mail the user
Console.WriteLine($"Welcome to our application, {userName}");
}

Giải trình.
Dòng số 5 lưu trữ JobId thành một biến. Bạn có thể thấy rằng chúng tôi thực sự đang thêm một công việc Nền được thể hiện bằng một hàm giả SendWelcomeMail. JobId sau đó được đăng trở lại Bảng điều khiển Hangfire. Xây dựng ứng dụng và chạy nó. Hãy cùng Postman kiểm tra nó.

hangfire faf postman Hangfire trong ASP.NET Core 3.1 - Công việc nền được thực hiện dễ dàng

Lưu ý URL và cách tôi chuyển tên người dùng đến bộ điều khiển. Khi bạn thực hiện nó, bạn sẽ nhận được phản hồi theo yêu cầu của chúng tôi. “Id công việc 2 đã hoàn thành. Chào mừng Thư đã Gửi! ”. Bây giờ chúng ta hãy kiểm tra trên bảng điều khiển Hangfire.

hangfire faf dash Hangfire trong ASP.NET Core 3.1 - Công việc nền được thực hiện dễ dàng

Trong Tab Thành công, bạn có thể xem số lượng công việc đã hoàn thành. Bạn cũng có thể xem chi tiết của từng công việc, tương tự như ảnh chụp màn hình ở trên. Tất cả các tham số và tên chức năng được hiển thị ở đây. Bạn muốn chạy lại công việc này với các thông số tương tự? Nhấn vào nút Requeue. Nó sẽ thêm lại công việc của bạn trong hàng đợi Hangfire xử lý. Nó xảy ra gần như ngay lập tức.

Việc làm bị trì hoãn

Bây giờ, điều gì sẽ xảy ra nếu chúng ta muốn gửi một thư cho người dùng, không phải ngay lập tức mà sau 10 phút. Trong những trường hợp như vậy, chúng tôi sử dụng Công việc bị trì hoãn. Hãy xem nó được thực hiện sau đó tôi sẽ giải thích chi tiết. Trong cùng một bộ điều khiển, hãy thêm các dòng mã này. Nó khá giống với biến thể trước đó, nhưng chúng tôi giới thiệu một hệ số trễ cho nó.

[HttpPost]
[Route("delayedWelcome")]
public IActionResult DelayedWelcome(string userName)
{
var jobId = BackgroundJob.Schedule(() => SendDelayedWelcomeMail(userName),TimeSpan.FromMinutes(2));
return Ok($"Job Id {jobId} Completed. Delayed Welcome Mail Sent!");
}

public void SendDelayedWelcomeMail(string userName)
{
//Logic to Mail the user
Console.WriteLine($"Welcome to our application, {userName}");
}

Giải trình.
Dòng số 5 đã lên lịch công việc trong một khoảng thời gian xác định, trong trường hợp của chúng tôi là 2 phút. Điều đó có nghĩa là, công việc của chúng ta sẽ được thực hiện sau 2 phút kể từ khi hành động được gọi từ Postman. Hãy mở lại Postman và kiểm tra.

hangfire bị trì hoãn người đưa thư Hangfire trong ASP.NET Core 3.1 - Công việc nền được thực hiện dễ dàng

Bạn có thể thấy rằng chúng tôi nhận được phản hồi mong đợi từ Người đưa thư. Hiện nay. nhanh chóng chuyển về Bảng điều khiển Hangfire và nhấp vào Tab Công việc / Đã lên lịch. Nó sẽ nói rằng công việc sẽ chạy trong một phút. Đó là bạn fo. Bạn đã tạo Công việc đã lên lịch đầu tiên của mình bằng Hangfire một cách dễ dàng.

hangfire bị trì hoãn gạch ngang Hangfire trong ASP.NET Core 3.1 - Công việc nền được thực hiện dễ dàng

Công việc định kỳ

Khách hàng của chúng tôi đã đăng ký dịch vụ của chúng tôi. Rõ ràng là chúng tôi sẽ phải gửi cho anh ấy / cô ấy lời nhắc về việc thanh toán hoặc chính hóa đơn. Điều này cho thấy nhu cầu về một Công việc Định kỳ, nơi tôi có thể gửi email cho khách hàng của mình hàng tháng. Điều này được hỗ trợ trong Hangfire bằng cách sử dụng lịch CRON.
CRON là gì? CRON là một tiện ích dựa trên thời gian có thể xác định khoảng thời gian. Hãy xem làm thế nào để đạt được một yêu cầu như vậy.

[HttpPost]
[Route("invoice")]
public IActionResult Invoice(string userName)
{
RecurringJob.AddOrUpdate(() => SendInvoiceMail(userName), Cron.Monthly);
return Ok($"Recurring Job Scheduled. Invoice will be mailed Monthly for {userName}!");
}

public void SendInvoiceMail(string userName)
{
//Logic to Mail the user
Console.WriteLine($"Here is your invoice, {userName}");
}

Dòng # 5 nói rõ rằng chúng tôi đang cố gắng thêm / cập nhật Công việc Định kỳ, công việc đó gọi một hàm nhiều lần như được định nghĩa bởi lược đồ CRON. Tại đây, chúng tôi sẽ gửi hóa đơn cho khách hàng hàng tháng vào ngày đầu tiên hàng tháng. Hãy chạy ứng dụng và chuyển sang Postman. Tôi đang thực thi mã này vào ngày 24 tháng 5 năm 2020. Theo yêu cầu của chúng tôi, công việc này sẽ bị sa thải vào ngày 1 tháng 6 năm 2020, tức là 7 ngày nữa. Để xem.

Hangfire người đưa thư định kỳ Hangfire trong ASP.NET Core 3.1 - Công việc nền được thực hiện dễ dàng

Vì vậy, điều này đã hoạt động. Hãy chuyển sang Bảng điều khiển Hangfire và chuyển đến Tab Công việc Định kỳ.

dấu gạch ngang định kỳ hangfire Hangfire trong ASP.NET Core 3.1 - Công việc nền được thực hiện dễ dàng

Hoàn hảo! Hoạt động như ngoại lệ. Bạn có thể xem qua các chương trình CRON khác nhau ở đây có thể phù hợp với yêu cầu của bạn. Đây là một tài liệu nhỏ hay để hiểu các biểu thức CRON khác nhau là cách sử dụng của nó.

Tiếp tục

Đây là một kịch bản phức tạp hơn. Hãy để tôi cố gắng giữ nó thật đơn giản. Người dùng quyết định hủy đăng ký dịch vụ của bạn. Sau khi anh ta xác nhận hành động của mình (Có thể nhấp vào nút hủy đăng ký), chúng tôi (ứng dụng) phải hủy đăng ký anh ta khỏi hệ thống và gửi cho anh ta một thư xác nhận sau đó. Vì vậy, công việc đầu tiên thực sự là hủy đăng ký người dùng. Công việc thứ hai là gửi mail xác nhận hành động. Công việc thứ hai chỉ nên được thực hiện sau khi công việc đầu tiên được hoàn thành đúng cách. Nhận kịch bản?

[HttpPost]
[Route("unsubscribe")]
public IActionResult Unsubscribe(string userName)
{
var jobId = BackgroundJob.Enqueue(() => UnsubscribeUser(userName));
BackgroundJob.ContinueJobWith(jobId, () => Console.WriteLine($"Sent Confirmation Mail to {userName}"));
return Ok($"Unsubscribed");
}

public void UnsubscribeUser(string userName)
{
//Logic to Unsubscribe the user
Console.WriteLine($"Unsubscribed {userName}");
}

Giải trình.
Dòng # 5 Công việc đầu tiên thực sự chứa logic để xóa đăng ký của người dùng.
Dòng # 6 Công việc thứ hai của chúng tôi sẽ tiếp tục sau khi công việc đầu tiên được thực hiện. Điều này được thực hiện bằng cách chuyển Id công việc của Công việc mẹ cho Công việc con.

Hãy kích hoạt ứng dụng và truy cập Postman.

hangfire coont postman Hangfire trong ASP.NET Core 3.1 - Công việc nền được thực hiện dễ dàng

hangfire coont dash Hangfire trong ASP.NET Core 3.1 - Công việc nền được thực hiện dễ dàng

Bây giờ, hãy truy cập Trang tổng quan và kiểm tra công việc đã thành công. Bạn sẽ thấy 2 công việc mới được thực hiện theo đúng thứ tự mà chúng tôi muốn. Đó là nó cho hướng dẫn này. Tôi hy vọng các bạn đã hiểu rõ những khái niệm này và thấy dễ dàng tích hợp Hangfire trong các Ứng dụng cốt lõi của ASP.NET.

Bản tóm tắt

Trong hướng dẫn chuyên sâu này, chúng ta đã đi qua các khái niệm về Công việc nền, Tính năng và Triển khai Hangfire trong các Ứng dụng cốt lõi của ASP.NET và các Loại công việc khác nhau trong Hangfire. Mã nguồn được sử dụng để trình bày hướng dẫn này được đăng trên GitHub. Mình sẽ để lại link bên dưới cho các bạn tham khảo. Bạn có kinh nghiệm với Hangfire? Bạn có thắc mắc / đề xuất nào không? Hãy để lại bên dưới trong phần bình luận. Chúc bạn mã hóa vui vẻ!

Nguồn: https://codewithmukesh.com/blog/hangfire-in-aspnet-core-3-1/

#aspdotnet #hangfire 

Hangfire trong ASP.NET Core 3.1

Hangfire no ASP.NET Core 3.1

Neste artigo, vamos aprender sobre o Hangfire no ASP.NET Core 3.1 e como integrá-lo com seus aplicativos principais. Uma tarefa de programação comum que enfrentamos regularmente é executar tarefas em segundo plano. E executar esses trabalhos corretamente sem bagunçar seu código não é uma tarefa fácil, mas também não é difícil. Eu costumava trabalhar com os serviços do Windows para agendar várias tarefas no meu aplicativo C#. Então, me deparei com esta biblioteca quase incrível – Hangfire, e nunca mais saí.

Trabalhos em segundo plano no ASP.NET Core

Essencialmente, os trabalhos em segundo plano são aqueles métodos ou funções que podem levar muito tempo para serem executados (quantidade de tempo desconhecida). Esses trabalhos, se executados no thread principal de nosso aplicativo, podem/não bloquear a interação do usuário e podem parecer que nosso aplicativo .NET Core travou e não está respondendo. Isso é bastante crítico para aplicativos voltados para o cliente. Portanto, temos trabalhos em segundo plano, semelhantes ao multithreading, esses trabalhos são executados em outro thread, fazendo com que nossa aplicação pareça bastante assíncrona.

Também devemos ter a possibilidade de agendá-los em um futuro próximo para que seja totalmente automatizado. A vida de um desenvolvedor seria tão difícil sem essas possibilidades incríveis.

O que é Hangfire?

Hangfire é uma biblioteca de código aberto que permite aos desenvolvedores agendar eventos em segundo plano com a maior facilidade. É uma biblioteca altamente flexível que oferece vários recursos necessários para tornar a tarefa de agendamento de trabalho uma tarefa fácil. Hangfire no ASP.NET Core é a única biblioteca que você não pode perder.

Integrando o Hangfire no ASP.NET Core 3.1

Para este tutorial, vamos ter um cenário específico para que possamos explicar o Hangfire e seu potencial completo. Digamos que estamos desenvolvendo uma API que é responsável por enviar e-mails ao usuário para diferentes cenários. Faz mais sentido explicar Hangfire dessa maneira. Hangfire é uma das bibliotecas mais fáceis de se adaptar, mas também muito poderosa. É um dos pacotes que ajuda inteiramente a construir aplicativos de maneira desacoplada assíncrona.

Como mencionei anteriormente, o Hangfire usa um banco de dados para armazenar os dados do trabalho. Usaremos o banco de dados MSSQL Server nesta demonstração. O Hangfire cria automaticamente as tabelas necessárias durante a primeira execução.

Configurando o projeto ASP.NET Core

Começaremos criando um novo projeto ASP.NET Core com o modelo de API selecionado. Agora crie um controlador de API vazio. Vamos chamá-lo de HangfireController. Estou usando o Visual Studio 2019 Community como meu IDE e POSTMAN para testar as APIs.

Instalando os Pacotes Hangfire

Instalando o único pacote que você precisaria para configurar o Hangfire.

Install-Package Hangfire

Configurando o Hangfire

Depois de instalar o pacote, agora estamos prontos para configurá-lo para ser compatível com nosso aplicativo ASP.NET Core API. Este é um passo bastante direto, além de que uma vez que você instalar o pacote, você verá um Leiame rápido que mostra o passo para completar a configuração.

Navigate to Startup.cs / ConfigureServices so that it looks like the below code snippet.
public void ConfigureServices(IServiceCollection services)
{
services.AddHangfire(x => x.UseSqlServerStorage("<connection string>"));
services.AddHangfireServer();
services.AddControllers();
}

Explicação.
Linha #3 Adiciona o serviço Hangfire ao nosso aplicativo. Também mencionamos o Storage a ser usado, MSSQL Server, juntamente com a string/nome da conexão.
A linha #4 realmente ativa o Hangfire Server, que é responsável pelo processamento do trabalho.

Feito isso, vamos ao método Configure adicionar a seguinte linha.

app.UseHangfireDashboard("/mydashboard");

Explicação.
O que essa linha faz é nos permitir acessar o painel hangfire em nosso aplicativo ASP.NET Core. O painel estará disponível acessando a URL /mydashboard. Vamos iniciar o aplicativo.

Esquema de banco de dados Hangfire

Quando você inicia seu aplicativo ASP.NET Core pela hora, o Hangfire verifica se você tem um esquema Hangfire associado disponível em seu banco de dados. Caso contrário, ele criará um monte de tabelas para você. Veja como ficaria seu banco de dados.

hangfire dbschema Hangfire no ASP.NET Core 3.1 - Trabalhos em segundo plano facilitados

Painel Hangfire

Após o carregamento do aplicativo, navegue até <localhost>/mydashboard. Você poderá visualizar o painel do Hangfire.

Hangfire no ASP.NET Core

A partir do painel, você poderá monitorar os trabalhos e seus status. Também permite acionar manualmente os trabalhos disponíveis. Este é o ÚNICO recurso que diferencia o Hangfire de outros Agendadores. Painel embutido. Quão legal é isso? A captura de tela acima é a da visão geral do Painel. Vamos explorar as outras guias também.

Aba Trabalhos.

Todos os trabalhos disponíveis no armazenamento de dados (nosso MSSQL Server) serão listados aqui. Você terá uma ideia completa do estado de cada trabalho (Enfileirado, Êxito, Processando, Com Falha, etc) nesta tela.

hangfire jobs Hangfire no ASP.NET Core 3.1 - Trabalhos em segundo plano facilitados

Aba Tentativas.

Os trabalhos tendem a falhar de vez em quando devido a fatores externos. No nosso caso, nossa api tenta enviar um email para o usuário, mas há um problema de conexão interna, que faz com que o trabalho não seja executado. Quando um trabalho falha, o Hangfire continua tentando novamente, até passar. (configurável)

hangfire repete Hangfire no ASP.NET Core 3.1 - trabalhos em segundo plano facilitados

Aba Trabalhos Recorrentes.

E se você precisar enviar o uso de sua fatura mensalmente. Este é o recurso principal do Hangfire, trabalhos recorrentes. Esta guia permite monitorar todos os trabalhos configurados.

hangfire recorrente Hangfire no ASP.NET Core 3.1 - Trabalhos em segundo plano facilitados

Aba Servidores.

Lembre-se, ao configurar o Hangfire na classe Startup.cs, mencionamos. services.AddHangfireServer().. Esta é a aba onde mostra todo o Hangfire Server ativo. Esses servidores são responsáveis ​​pelo processamento de jobs. Digamos que você não tenha adicionado o services.AddHangfireServer() na classe Startup, você ainda poderá adicionar Hangfire Jobs ao banco de dados, mas eles não serão executados até que você inicie um Hangfire Server.

servidor hangfire Hangfire no ASP.NET Core 3.1 - Trabalhos em segundo plano facilitados

Protegendo o painel Hangfire

Esta é uma característica bastante óbvia. Como o painel pode expor dados muito confidenciais, como nomes de métodos, valores de parâmetros, IDs de e-mail, é muito importante proteger/restringir esse endpoint. O Hangfire, pronto para uso, torna o painel seguro, permitindo apenas solicitações locais. No entanto, você pode alterar isso implementando sua própria versão de IDashboardAuthorizationFilter . Se você já implementou a autorização em sua API, você pode implementá-la para o Hangfire. Consulte estas etapas para proteger o painel.

Tipos de trabalho no Hangfire

Trabalhos em segundo plano no ASP.NET Core (ou qualquer tecnologia) podem ser de vários tipos, dependendo dos requisitos. Vamos analisar os tipos de trabalho disponíveis com o Hangfire com implementação e explicação adequadas em nosso projeto de API ASP.NET Core. Vamos começar a codificação.

Trabalhos de despedir e esquecer

Os trabalhos de despedir e esquecer são executados  apenas uma vez  e quase  imediatamente  após a criação. Vamos criar nosso primeiro Job em segundo plano. Abra o Hangfire Controller que criamos. Vamos criar um endpoint POST que recebe um usuário com um email (idealmente). Adicione esses códigos.

[HttpPost]
[Route("welcome")]
public IActionResult Welcome(string userName)
{
var jobId = BackgroundJob.Enqueue(() => SendWelcomeMail(userName));
return Ok($"Job Id {jobId} Completed. Welcome Mail Sent!");
}

public void SendWelcomeMail(string userName)
{
//Logic to Mail the user
Console.WriteLine($"Welcome to our application, {userName}");
}

Explicação.
A linha #5 armazena o JobId em uma variável. Você pode ver que estamos realmente adicionando um trabalho em segundo plano representado por uma função fictícia SendWelcomeMail. O JobId é posteriormente postado de volta no Hangfire Dashboard. Compile o aplicativo e execute-o. Vamos testá-lo com o Postman.

hangfire faf carteiro Hangfire no ASP.NET Core 3.1 - Trabalhos em segundo plano facilitados

Observe a URL e como estou passando o nome de usuário para o controlador. Depois de executá-lo, você receberá nossa resposta necessária. “Job ID 2 concluído. Bem-vindo Email Enviado!”. Agora vamos verificar o painel do Hangfire.

hangfire faf dash Hangfire no ASP.NET Core 3.1 - Trabalhos em segundo plano facilitados

Na guia Bem-sucedido, você pode ver a contagem de trabalhos concluídos. Você também pode ver os detalhes de cada trabalho, semelhante à captura de tela acima. Todos os parâmetros e nomes de funções são expostos aqui. Deseja executar este trabalho novamente com os mesmos parâmetros? Pressione o botão Requeue. Ele adiciona novamente seu trabalho na fila para o Hangfire processar. Acontece quase imediatamente.

Trabalhos atrasados

Agora, e se quisermos enviar um e-mail para um usuário, não imediatamente, mas depois de 10 minutos. Nesses casos, usamos Jobs atrasados. Vamos ver sua implementação e depois explicarei em detalhes. No mesmo controlador, adicione essas linhas de código. É bastante semelhante à variante anterior, mas introduzimos um fator de atraso.

[HttpPost]
[Route("delayedWelcome")]
public IActionResult DelayedWelcome(string userName)
{
var jobId = BackgroundJob.Schedule(() => SendDelayedWelcomeMail(userName),TimeSpan.FromMinutes(2));
return Ok($"Job Id {jobId} Completed. Delayed Welcome Mail Sent!");
}

public void SendDelayedWelcomeMail(string userName)
{
//Logic to Mail the user
Console.WriteLine($"Welcome to our application, {userName}");
}

Explicação.
A linha #5 agendou o trabalho para um intervalo de tempo definido, no nosso caso é de 2 minutos. Isso significa que nosso trabalho será executado 2 minutos após a ação ser chamada pelo Postman. Vamos abrir o Postman novamente e testar.

hangfire atrasou o carteiro Hangfire no ASP.NET Core 3.1 - Trabalhos em segundo plano facilitados

Você pode ver que recebemos a resposta esperada do Postman. Agora. volte rapidamente para o Hangfire Dashboard e clique na guia Jobs/Scheduled. Diria que o trabalho será executado em um minuto. Aí você. Você criou seu primeiro trabalho agendado usando o Hangfire com facilidade.

hangfire atrasado traço Hangfire no ASP.NET Core 3.1 - Trabalhos em segundo plano facilitados

Trabalhos recorrentes

Nosso Cliente tem uma assinatura do nosso serviço. Obviamente, teríamos que enviar a ele um lembrete sobre o pagamento ou a própria fatura. Isso chama a necessidade de um Trabalho Recorrente, onde posso enviar e-mails aos meus clientes mensalmente. Isso é suportado no Hangfire usando a programação CRON.
O que é CRON? CRON é um utilitário baseado em tempo que pode definir intervalos de tempo. Vamos ver como alcançar tal requisito.

[HttpPost]
[Route("invoice")]
public IActionResult Invoice(string userName)
{
RecurringJob.AddOrUpdate(() => SendInvoiceMail(userName), Cron.Monthly);
return Ok($"Recurring Job Scheduled. Invoice will be mailed Monthly for {userName}!");
}

public void SendInvoiceMail(string userName)
{
//Logic to Mail the user
Console.WriteLine($"Here is your invoice, {userName}");
}

A linha 5 indica claramente que estamos tentando adicionar/atualizar um trabalho recorrente, que chama uma função quantas vezes for definido pelo esquema CRON. Aqui, enviaremos a fatura ao cliente mensalmente no primeiro dia de cada mês. Vamos executar o aplicativo e mudar para o Postman. Estou executando este código em 24 de maio de 2020. De acordo com nosso requisito, este trabalho deve ser demitido em 1º de junho de 2020, daqui a 7 dias. Vamos ver.

hangfire carteiro recorrente Hangfire no ASP.NET Core 3.1 - Trabalhos em segundo plano facilitados

Então, isso funcionou. Vamos mudar para o Hangfire Dashboard e ir para a guia Recurring Jobs.

hangfire traço recorrente Hangfire no ASP.NET Core 3.1 - Trabalhos em segundo plano facilitados

Perfeito! Funciona como exceção. Você pode passar por vários esquemas CRON aqui que podem atender às suas necessidades. Aqui está uma pequena documentação para entender várias expressões CRON e seu uso.

Continuações

Este é um cenário mais complicado. Deixe-me tentar mantê-lo muito simples. Um usuário decide cancelar a assinatura do seu serviço. Depois que ele confirmar sua ação (talvez clicando no botão de cancelamento de inscrição), nós (o aplicativo) temos que cancelar sua inscrição do sistema e enviar um e-mail de confirmação depois disso também. Então, o primeiro trabalho é realmente cancelar a inscrição do usuário. O segundo trabalho é enviar um e-mail confirmando a ação. O segundo trabalho deve ser executado somente após o primeiro trabalho ser concluído corretamente. Obter o cenário?

[HttpPost]
[Route("unsubscribe")]
public IActionResult Unsubscribe(string userName)
{
var jobId = BackgroundJob.Enqueue(() => UnsubscribeUser(userName));
BackgroundJob.ContinueJobWith(jobId, () => Console.WriteLine($"Sent Confirmation Mail to {userName}"));
return Ok($"Unsubscribed");
}

public void UnsubscribeUser(string userName)
{
//Logic to Unsubscribe the user
Console.WriteLine($"Unsubscribed {userName}");
}

Explicação.
Linha #5 O primeiro trabalho que realmente contém lógicas para remover a assinatura do usuário.
Linha #6 Nosso Segundo Trabalho que continuará após o Primeiro Trabalho ser executado. Isso é feito passando o ID do Trabalho do Trabalho Pai para os Trabalhos Filhos.

Vamos iniciar o aplicativo e ir para o Postman.

hangfire coont carteiro Hangfire no ASP.NET Core 3.1 - Trabalhos em segundo plano facilitados

hangfire coont dash Hangfire no ASP.NET Core 3.1 - Trabalhos em segundo plano facilitados

Agora, vá para o Dashboard e verifique o trabalho bem-sucedido. Você verá 2 novos trabalhos executados na ordem exata em que queríamos. É isso para este tutorial. Espero que vocês sejam claros com esses conceitos e achem fácil integrar o Hangfire em aplicativos ASP.NET Core.

Resumo

Neste guia detalhado, passamos pelos conceitos de trabalhos em segundo plano, recursos e implementação do Hangfire em aplicativos ASP.NET Core e vários tipos de trabalho no Hangfire. O código-fonte usado para demonstrar este tutorial está publicado no GitHub. Vou deixar o link abaixo para você consultar. Você tem experiência com Hangfire? Você tem alguma dúvida/sugestão? Sinta-se livre para deixar abaixo na seção de comentários. Boa Codificação!

Fonte: https://codewithmukesh.com/blog/hangfire-in-aspnet-core-3-1/

#aspdotnet #hangfire 

Hangfire no ASP.NET Core 3.1
曾 俊

曾 俊

1659720600

ASP.NET Core 3.1 中的 Hangfire

在本文中,让我们了解 ASP.NET Core 3.1 中的 Hangfire 以及如何将其与您的核心应用程序集成。我们经常面临的一个常见编程任务是在后台运行作业。在不弄乱代码的情况下正确运行这些作业并不是一件容易的事,但也不难。我曾经使用 Windows 服务来安排我的 C# 应用程序中的各种任务。然后,我遇到了这个近乎令人敬畏的图书馆——Hangfire,我再也没有离开过。

ASP.NET Core 中的后台作业

从本质上讲,后台作业是那些可能需要大量时间来执行(时间未知)的方法或功能。这些作业如果在我们应用程序的主线程中运行,可能/可能不会阻塞用户交互,并且看起来好像我们的 .NET Core 应用程序已挂起并且没有响应。这对于面向客户端的应用程序来说非常重要。因此,我们有后台作业,类似于多线程,这些作业在另一个线程中运行,使我们的应用程序看起来非常异步。

我们还应该有可能在不久的将来安排它们,以便它完全自动化。如果没有这些令人敬畏的可能性,开发人员的生活将如此艰难。

什么是吊火?

Hangfire是一个开源库,使开发人员能够最轻松地在后台安排事件。它是一个高度灵活的库,提供了使作业调度任务轻而易举所需的各种功能。ASP.NET Core 中的 Hangfire 是您不能错过的一个库。

在 ASP.NET Core 3.1 中集成 Hangfire

对于本教程,让我们有一个特定的场景,以便我们可以解释 Hangfire 和它的全部潜力。假设我们正在开发一个 API,负责针对不同场景向用户发送邮件。以这种方式解释 Hangfire 更有意义。Hangfire 是最容易适应的库之一,但也是一个非常强大的库。它是完全帮助以异步解耦方式构建应用程序的软件包之一。

正如我之前提到的,Hangfire 使用数据库来存储作业数据。我们将在此演示中使用 MSSQL Server 数据库。Hangfire 在第一次运行时会自动创建所需的表。

设置 ASP.NET Core 项目

我们将首先创建一个新的 ASP.NET Core 项目,并选择 API 模板。现在创建一个空的 API 控制器。我们称之为 HangfireController。我使用Visual Studio 2019 Community作为我的 IDE 和 POSTMAN 来测试 API。

安装 Hangfire 软件包

安装设置 Hangfire 所需的唯一软件包。

Install-Package Hangfire

配置 Hangfire

安装包后,我们现在可以对其进行配置,以便我们的 ASP.NET Core API 应用程序支持它。这是一个非常直接的步骤,除了安装软件包后,您将看到一个快速自述文件,其中显示了完成配置的步骤。

Navigate to Startup.cs / ConfigureServices so that it looks like the below code snippet.
public void ConfigureServices(IServiceCollection services)
{
services.AddHangfire(x => x.UseSqlServerStorage("<connection string>"));
services.AddHangfireServer();
services.AddControllers();
}

解释。
第 3行将 Hangfire 服务添加到我们的应用程序中。我们还提到了要使用的存储,MSSQL Server,以及连接字符串/名称。
第 4 行实际上启动了负责作业处理的 Hangfire 服务器。

完成后,让我们转到配置方法添加以下行。

app.UseHangfireDashboard("/mydashboard");

解释。
这条线的作用是,它允许我们访问 ASP.NET Core 应用程序中的 hangfire 仪表板。通过转到 /mydashboard URL 可以使用仪表板。让我们启动应用程序。

Hangfire 数据库架构

当您启动 ASP.NET Core 应用程序时,Hangfire 会检查您的数据库中是否有关联的 Hangfire Schema。如果没有,它将为您创建一堆表。这是您的数据库的外观。

ASP.NET Core 3.1 中的hangfire dbschema Hangfire - 轻松实现后台作业

挂火仪表板

应用程序加载后,导航到 <localhost>/mydashboard。您将能够查看 Hangfire 仪表板。

ASP.NET Core 中的 Hangfire

从仪表板中,您将能够监控作业及其状态。它还允许您手动触发可用作业。这是将 Hangfire 与其他调度程序区分开来的一项功能。内置仪表板。多么酷啊?上面的屏幕截图是仪表板概述的屏幕截图。让我们也探索其他选项卡。

工作选项卡。

数据存储区(我们的 MSSQL 服务器)中可用的所有作业都将在此处列出。您将在此屏幕上全面了解每个作业的状态(入队、成功、处理中、失败等)。

ASP.NET Core 3.1 中的 Hangfire 作业 - 后台作业变得简单

重试选项卡。

由于外部因素,工作往往会偶尔失败。在我们的例子中,我们的 api 尝试向用户发送邮件,但存在内部连接问题,导致作业无法执行。当作业失败时,Hangfire 会继续重试,直到通过。(可配置)

hangfire 在 ASP.NET Core 3.1 中重试 Hangfire - 轻松实现后台作业

重复作业选项卡。

如果您需要每月邮寄使用他的发票怎么办。这是 Hangfire 的核心功能,重复工作。此选项卡允许您监控所有已配置的作业。

hangfire 在 ASP.NET Core 3.1 中重复出现 Hangfire - 轻松实现后台作业

服务器选项卡。

请记住,在 Startup.cs 类中配置 Hangfire 时,我们已经提到过。services.AddHangfireServer().. 这是显示所有活动 Hangfire 服务器的选项卡。这些服务器负责处理作业。假设您没有在 Startup 类中添加 services.AddHangfireServer(),您仍然可以将 Hangfire 作业添加到数据库中,但是在您启动 Hangfire 服务器之前它们不会被执行。

ASP.NET Core 3.1 中的hangfire 服务器 Hangfire - 轻松实现后台作业

保护 Hangfire 仪表板

这是一个非常明显的特征。由于仪表板可能会暴露非常敏感的数据,例如方法名称、参数值、电子邮件 ID,因此我们保护/限制此端点非常重要。开箱即用的 Hangfire 通过仅允许本地请求来确保仪表板的安全。但是,您可以通过实现自己的IdashboardAuthorizationFilter版本来更改此设置。如果你已经在你的 API 中实现了授权,你可以为 Hangfire 实现它。请参阅这些步骤来保护仪表板。

Hangfire 中的工作类型

ASP.NET Core(或者说任何技术)中的后台作业可以有多种类型,具体取决于要求。让我们在我们的 ASP.NET Core API 项目中通过正确的实现和解释来了解 Hangfire 可用的作业类型。让我们开始编码。

即发即弃的工作

即发即弃的作业只执行 一次 ,几乎  在创建后立即执行。我们将创建我们的第一个后台作业。打开我们创建的 Hangfire 控制器。我们将创建一个 POST 端点,通过电子邮件(理想情况下)欢迎用户。添加这些代码。

[HttpPost]
[Route("welcome")]
public IActionResult Welcome(string userName)
{
var jobId = BackgroundJob.Enqueue(() => SendWelcomeMail(userName));
return Ok($"Job Id {jobId} Completed. Welcome Mail Sent!");
}

public void SendWelcomeMail(string userName)
{
//Logic to Mail the user
Console.WriteLine($"Welcome to our application, {userName}");
}

解释。
第 5 行将 JobId 存储到一个变量中。您可以看到我们实际上添加了一个由虚拟函数 SendWelcomeMail 表示的后台作业。JobId 稍后会发布回 Hangfire 仪表板。构建应用程序并运行它。让我们用Postman测试一下。

ASP.NET Core 3.1 中的hangfire faf postman Hangfire - 轻松实现后台作业

请注意 URL 以及我如何将用户名传递给控制器​​。执行后,您将获得我们所需的响应。“作业 ID 2 已完成。欢迎邮件已发送!”。现在让我们检查一下 Hangfire 仪表板。

ASP.NET Core 3.1 中的hangfire faf dash Hangfire - 轻松实现后台作业

在 Succeeded 选项卡下,您可以查看已完成作业的计数。您还可以查看每个作业的详细信息,类似于上面的屏幕截图。所有参数和函数名称都在这里公开。想要使用相同的参数再次运行此作业吗?按重新排队按钮。它会将您的工作重新添加到队列中以供 Hangfire 处理。它几乎立即发生。

延迟作业

现在,如果我们想向用户发送邮件,不是立即发送,而是在 10 分钟后发送。在这种情况下,我们使用延迟作业。让我们看看它的实现,之后我将详细解释。在同一个控制器中,添加这些代码行。它与之前的变体非常相似,但我们为其引入了延迟因子。

[HttpPost]
[Route("delayedWelcome")]
public IActionResult DelayedWelcome(string userName)
{
var jobId = BackgroundJob.Schedule(() => SendDelayedWelcomeMail(userName),TimeSpan.FromMinutes(2));
return Ok($"Job Id {jobId} Completed. Delayed Welcome Mail Sent!");
}

public void SendDelayedWelcomeMail(string userName)
{
//Logic to Mail the user
Console.WriteLine($"Welcome to our application, {userName}");
}

解释。
第 5 行将作业安排到定义的时间跨度,在我们的例子中是 2 分钟。这意味着,我们的作业将在 Postman 调用该操作后 2 分钟执行。让我们再次打开 Postman 并进行测试。

ASP.NET Core 3.1 中的hangfire 延迟邮递员 Hangfire - 后台作业变得简单

您可以看到我们收到了 Postman 的预期响应。现在。快速切换回 Hangfire Dashboard 并单击 Jobs/Scheduled 选项卡。它会说该作业将在一分钟内运行。你在那里。您已经使用 Hangfire 轻松创建了您的第一个计划作业。

ASP.NET Core 3.1 中的 hangfire 延迟破折号 Hangfire - 后台作业变得简单

经常性工作

我们的客户订阅了我们的服务。我们显然必须向他/她发送有关付款或发票本身的提醒。这需要定期工作,我可以每月向客户发送电子邮件。这在 Hangfire 中使用 CRON 计划支持。
什么是 CRON?CRON 是一个基于时间的实用程序,可以定义时间间隔。让我们看看如何实现这样的要求。

[HttpPost]
[Route("invoice")]
public IActionResult Invoice(string userName)
{
RecurringJob.AddOrUpdate(() => SendInvoiceMail(userName), Cron.Monthly);
return Ok($"Recurring Job Scheduled. Invoice will be mailed Monthly for {userName}!");
}

public void SendInvoiceMail(string userName)
{
//Logic to Mail the user
Console.WriteLine($"Here is your invoice, {userName}");
}

第 5 行清楚地表明我们正在尝试添加/更新一个循环作业,它调用一个函数的次数与 CRON 方案定义的一样多。在这里,我们将在每个月的第一天按月将发票邮寄给客户。让我们运行应用程序并切换到 Postman。我在 2020 年 5 月 24 日执行这段代码。根据我们的要求,这个工作应该在 2020 年 6 月 1 日被解雇,也就是 7 天。让我们看看。

ASP.NET Core 3.1 中的hangfire 循环邮递员 Hangfire - 轻松实现后台作业

所以,这行得通。让我们切换到 Hangfire Dashboard 并转到 Recurring Jobs 选项卡。

ASP.NET Core 3.1 中的hangfire 重复破折号 Hangfire - 轻松实现后台作业

完美的!例外地工作。您可以在此处查看可能符合您要求的各种 CRON 方案。这是一个很好的小文档,可以了解各种 CRON 表达式的用法。

继续

这是一个更复杂的场景。让我尽量保持简单。用户决定取消订阅您的服务。在他确认他的操作后(也许单击取消订阅按钮),我们(应用程序)必须从系统中取消他的订阅,并在此之后也向他发送一封确认邮件。因此,第一项工作是实际取消订阅用户。第二项工作是发送一封确认该操作的邮件。只有在第一个作业正确完成后,才能执行第二个作业。了解剧情?

[HttpPost]
[Route("unsubscribe")]
public IActionResult Unsubscribe(string userName)
{
var jobId = BackgroundJob.Enqueue(() => UnsubscribeUser(userName));
BackgroundJob.ContinueJobWith(jobId, () => Console.WriteLine($"Sent Confirmation Mail to {userName}"));
return Ok($"Unsubscribed");
}

public void UnsubscribeUser(string userName)
{
//Logic to Unsubscribe the user
Console.WriteLine($"Unsubscribed {userName}");
}

解释。
第 5 行第一个作业实际上包含删除用户订阅的逻辑。
第 6 行我们的第二个作业将在第一个作业执行后继续。这是通过将父作业的作业 ID 传递给子作业来完成的。

让我们启动应用程序并转到 Postman。

ASP.NET Core 3.1 中的hangfire coont postman Hangfire - 轻松实现后台作业

ASP.NET Core 3.1 中的hangfire coont dash Hangfire - 轻松实现后台作业

现在,转到仪表板并检查成功的作业。您将看到 2 个新作业按照我们想要的确切顺序执行。这就是本教程的内容。我希望你们清楚这些概念,并发现将 Hangfire 集成到 ASP.NET Core 应用程序中很容易。

概括

在这个深入的指南中,我们已经了解了 ASP.NET Core 应用程序中的后台作业、功能和实现 Hangfire 的概念以及 Hangfire 中的各种作业类型。用于演示本教程的源代码发布在 GitHub 上。我将留下下面的链接供您参考。你有使用 Hangfire 的经验吗?您有任何疑问/建议吗?随时在评论部分留下。快乐编码!

来源:https ://codewithmukesh.com/blog/hangfire-in-aspnet-core-3-1/

#aspdotnet #hangfire 

ASP.NET Core 3.1 中的 Hangfire
坂本  篤司

坂本 篤司

1659719340

ASP.NET Core 3.1 の Hangfire

この記事では、ASP.NET Core 3.1 の Hangfire と、それをコア アプリケーションに統合する方法について学びましょう。私たちが定期的に直面する一般的なプログラミング タスクは、バックグラウンドでジョブを実行することです。コードを台無しにすることなくこれらのジョブを適切に実行するのは簡単なことではありませんが、難しいことでもありません。以前は、C# アプリケーション内でさまざまなタスクをスケジュールするために Windows サービスを使用していました。それから、私はこの素晴らしいライブラリに近いハングファイアに出くわし、決して離れませんでした.

ASP.NET Core のバックグラウンド ジョブ

基本的に、バックグラウンド ジョブは、実行に多くの時間がかかる可能性があるメソッドまたは関数です (不明な時間)。これらのジョブをアプリケーションのメイン スレッドで実行すると、ユーザーの操作がブロックされる場合とブロックされない場合があり、.NET Core アプリケーションがハングして応答していないように見える場合があります。これは、クライアント向けアプリケーションにとって非常に重要です。したがって、マルチスレッドに似たバックグラウンド ジョブがあり、これらのジョブは別のスレッドで実行されるため、アプリケーションはまったく非同期に見えます。

また、完全に自動化されるように、近い将来にそれらをスケジュールする可能性もあるはずです. これらの素晴らしい可能性がなければ、開発者の生活は非常に厳しいものになるでしょう。

ハングファイアとは?

Hangfireは、開発者がバックグラウンドで非常に簡単にイベントをスケジュールできるようにするオープンソースのライブラリです。これは、ジョブ スケジューリング タスクを簡単に実行するために必要なさまざまな機能を提供する非常に柔軟なライブラリです。ASP.NET Core の Hangfire は、見逃せないライブラリの 1 つです。

Hangfire を ASP.NET Core 3.1 に統合する

このチュートリアルでは、Hangfire とその完全な可能性を説明できるように、特定のシナリオを考えてみましょう。さまざまなシナリオでユーザーにメールを送信する API を開発しているとしましょう。このように Hangfire を説明する方が理にかなっています。Hangfire は、最も簡単に適応できるライブラリの 1 つですが、非常に強力でもあります。これは、非同期で分離された方法でアプリケーションを構築するのに完全に役立つパッケージの 1 つです。

前述したように、Hangfire はデータベースを使用してジョブ データを保存します。このデモでは、MSSQL Server データベースを使用します。Hangfire は、最初の実行時に必要なテーブルを自動的に作成します。

ASP.NET Core プロジェクトのセットアップ

まず、API テンプレートを選択して新しい ASP.NET Core プロジェクトを作成します。空の API コントローラーを作成します。これを HangfireController と呼びましょう。Visual Studio 2019 Communityを IDE として使用し、POSTMAN を使用して API をテストしています。

Hangfire パッケージのインストール

Hangfire のセットアップに必要な唯一のパッケージをインストールします。

Install-Package Hangfire

ハングファイアの設定

パッケージをインストールしたら、ASP.NET Core API アプリケーションでサポートされるように構成する準備が整いました。これは非常に簡単な手順ですが、パッケージをインストールすると、構成を完了するための手順を示す簡単な Readme が表示されます。

Navigate to Startup.cs / ConfigureServices so that it looks like the below code snippet.
public void ConfigureServices(IServiceCollection services)
{
services.AddHangfire(x => x.UseSqlServerStorage("<connection string>"));
services.AddHangfireServer();
services.AddControllers();
}

説明。
3 行目では、Hangfire サービスをアプリケーションに追加します。使用するストレージ、MSSQL サーバー、および接続文字列/名前についても説明しました。
4 行目では、ジョブ処理を担当する Hangfire サーバーを実際に起動します。

それが完了したら、Configure メソッドに移動して、次の行を追加します。

app.UseHangfireDashboard("/mydashboard");

説明。
この行が行うことは、ASP.NET Core アプリケーションで hangfire ダッシュボードにアクセスできるようにすることです。ダッシュボードは、/mydashboard URL にアクセスすることで利用できます。アプリケーションを起動しましょう。

Hangfire データベース スキーマ

その時点で ASP.NET Core アプリケーションを起動すると、Hangfire は、関連する Hangfire スキーマがデータベースで使用可能かどうかをチェックします。そうでない場合は、一連のテーブルが作成されます。データベースは次のようになります。

hangfire dbschema ASP.NET Core 3.1 の Hangfire - バックグラウンド ジョブが簡単に

ハングファイア ダッシュボード

アプリケーションがロードされたら、<localhost>/mydashboard に移動します。Hangfire ダッシュボードを表示できます。

ASP.NET Core の Hangfire

ダッシュボードから、ジョブとそのステータスを監視できます。また、利用可能なジョブを手動でトリガーすることもできます。これは、Hangfire を他のスケジューラと区別する 1 つの機能です。組み込みのダッシュボード。それはどれほどクールですか?上のスクリーンショットは、ダッシュボードの概要のスクリーンショットです。他のタブも見てみましょう。

ジョブ タブ。

データストア (MSSQL サーバー) で利用可能なすべてのジョブがここに一覧表示されます。この画面では、各ジョブの状態 (キューに入れられた、成功した、処理中、失敗したなど) を完全に把握できます。

hangfire ジョブ ASP.NET Core 3.1 の Hangfire - バックグラウンド ジョブが簡単に

再試行タブ。

ジョブは、外的要因により、たまに失敗する傾向があります。私たちの場合、API はユーザーにメールを送信しようとしますが、ジョブの実行に失敗する内部接続の問題があります。ジョブが失敗すると、Hangfire は成功するまで再試行を続けます。(設定可能)

hangfire は ASP.NET Core 3.1 で Hangfire を再試行します - バックグラウンド ジョブが簡単に

[繰り返しジョブ] タブ。

毎月請求書を使用する必要がある場合はどうでしょうか。これは Hangfire のコア機能である定期的なジョブです。このタブでは、設定されたすべてのジョブを監視できます。

Hangfire の繰り返し ASP.NET Core 3.1 の Hangfire - バックグラウンド ジョブが簡単に

サーバータブ。

Startup.cs クラスで Hangfire を構成する際に言及したことを思い出してください。services.AddHangfireServer().. これは、すべてのアクティブなハングファイア サーバーを表示するタブです。これらのサーバーは、ジョブの処理を担当します。たとえば、Startup クラスに services.AddHangfireServer() を追加していなくても、Hangfire ジョブをデータベースに追加することはできますが、Hangfire サーバーを起動するまで実行されません。

hangfire サーバー ASP.NET Core 3.1 の Hangfire - バックグラウンド ジョブが簡単に

Hangfire ダッシュボードの保護

これは非常に明白な機能です。ダッシュボードはメソッド名、パラメーター値、メール ID などの非常に機密性の高いデータを公開する可能性があるため、このエンドポイントを保護/制限することが非常に重要です。Hangfire は、すぐに使用できるローカル リクエストのみを許可することで、ダッシュボードを安全にします。ただし、独自のバージョンのIDashboardAuthorizationFilterを実装することで、これを変更できます。API に Authorization を既に実装している場合は、Hangfire に実装できます。ダッシュボードを保護するには、次の手順を参照してください。

Hangfire のジョブ タイプ

ASP.NET Core (または任意のテクノロジ) のバックグラウンド ジョブには、要件に応じてさまざまな種類があります。ASP.NET Core API プロジェクトの適切な実装と説明とともに、Hangfire で利用可能なジョブ タイプを見ていきましょう。コーディングしましょう。

ファイア アンド フォーゲット ジョブ

ファイア アンド フォーゲット ジョブは、作成直後に 1 回だけ実行  さ  れます。最初のバックグラウンド ジョブを作成します。作成した Hangfire Controller を開きます。メールでユーザーを歓迎する POST エンドポイントを作成します (理想的には)。これらのコードを追加します。

[HttpPost]
[Route("welcome")]
public IActionResult Welcome(string userName)
{
var jobId = BackgroundJob.Enqueue(() => SendWelcomeMail(userName));
return Ok($"Job Id {jobId} Completed. Welcome Mail Sent!");
}

public void SendWelcomeMail(string userName)
{
//Logic to Mail the user
Console.WriteLine($"Welcome to our application, {userName}");
}

説明。
5 行目では、JobId を変数に格納します。ダミー関数 SendWelcomeMail で表されるバックグラウンド ジョブを実際に追加していることがわかります。JobId は、後で Hangfire ダッシュボードにポストされます。アプリケーションをビルドして実行します。Postmanでテストしてみましょう。

hangfire faf postman ASP.NET Core 3.1 の Hangfire - バックグラウンド ジョブが簡単に

URL と、ユーザー名をコントローラーに渡す方法に注意してください。実行すると、必要な応答が得られます。「ジョブ ID 2 が完了しました。ウェルカムメールを送信しました!」. それでは、Hangfire ダッシュボードを確認してみましょう。

hangfire faf dash ASP.NET Core 3.1 の Hangfire - バックグラウンド ジョブが簡単に

[成功] タブの下に、完了したジョブの数が表示されます。上のスクリーンショットのように、各ジョブの詳細も表示されます。すべてのパラメータと関数名はここで公開されます。同じパラメータでこのジョブを再度実行しますか? [再キューイング] ボタンを押します。Hangfire が処理するジョブをキューに再度追加します。それはほとんどすぐに起こります。

遅延ジョブ

では、すぐにではなく 10 分後にユーザーにメールを送信したい場合はどうでしょうか。そのような場合、遅延ジョブを使用します。その実装を見てみましょう。その後、詳細に説明します。同じコントローラーで、これらのコード行を追加します。これは前の亜種と非常に似ていますが、遅延要素を導入しています。

[HttpPost]
[Route("delayedWelcome")]
public IActionResult DelayedWelcome(string userName)
{
var jobId = BackgroundJob.Schedule(() => SendDelayedWelcomeMail(userName),TimeSpan.FromMinutes(2));
return Ok($"Job Id {jobId} Completed. Delayed Welcome Mail Sent!");
}

public void SendDelayedWelcomeMail(string userName)
{
//Logic to Mail the user
Console.WriteLine($"Welcome to our application, {userName}");
}

説明。
5 行目では、ジョブを定義された期間 (この場合は 2 分) にスケジュールします。つまり、Postman からアクションが呼び出されてから 2 分後にジョブが実行されます。Postman をもう一度開いてテストしてみましょう。

Hangfire 遅延郵便配達員 ASP.NET Core 3.1 の Hangfire - バックグラウンド ジョブが簡単に

Postman から期待どおりの応答を受け取っていることがわかります。今。すぐに Hangfire ダッシュボードに戻り、[Jobs/Scheduled] タブをクリックします。ジョブは 1 分で実行されます。ほら。Hangfire を使用して、最初のスケジュールされたジョブを簡単に作成できました。

ASP.NET Core 3.1 の Hangfire - バックグラウンド ジョブが簡単に

定期的な仕事

当社の顧客は、当社のサービスへのサブスクリプションを持っています。明らかに、支払いまたは請求書自体に関するリマインダーを彼/彼女に送信する必要があります。これにより、毎月顧客にメールを送信できる繰り返しジョブが必要になります。これは、CRON スケジュールを使用して Hangfire でサポートされています。
CRONとは?CRON は、時間間隔を定義できる時間ベースのユーティリティです。そのような要件を達成する方法を見てみましょう。

[HttpPost]
[Route("invoice")]
public IActionResult Invoice(string userName)
{
RecurringJob.AddOrUpdate(() => SendInvoiceMail(userName), Cron.Monthly);
return Ok($"Recurring Job Scheduled. Invoice will be mailed Monthly for {userName}!");
}

public void SendInvoiceMail(string userName)
{
//Logic to Mail the user
Console.WriteLine($"Here is your invoice, {userName}");
}

行番号 5 は、CRON スキームで定義されている回数だけ関数を呼び出す繰り返しジョブを追加/更新しようとしていることを明確に示しています。ここでは、毎月 1 日に請求書を毎月お客様に郵送します。アプリケーションを実行して、Postman に切り替えましょう。私はこのコードを 2020 年 5 月 24 日に実行しています。私たちの要件によると、このジョブは 7 日後の 2020 年 6 月 1 日に解雇されます。見てみましょう。

Hangfire 定期的な郵便配達員 ASP.NET Core 3.1 の Hangfire - バックグラウンド ジョブが簡単に

それで、これはうまくいきました。Hangfire Dashboard に切り替えて、Recurring Jobs タブに移動しましょう。

Hangfire recurring dash ASP.NET Core 3.1 の Hangfire - バックグラウンド ジョブが簡単に

完全!例外として動作します。ここで、要件に一致する可能性のあるさまざまな CRON スキームを実行できます。これは、さまざまな CRON 式がその使用法であることを理解するための素敵な小さなドキュメントです。

継続

これはより複雑なシナリオです。非常にシンプルに保つようにしましょう。ユーザーがサービスの登録を解除することにしました。彼が自分の行動を確認した後 (おそらく購読解除ボタンをクリック)、私たち (アプリケーション) はシステムから彼を購読解除し、その後も確認メールを送信する必要があります。したがって、最初の仕事は実際にユーザーの登録を解除することです。2 番目のジョブは、アクションを確認するメールを送信することです。2 番目のジョブは、最初のジョブが正常に完了した後にのみ実行する必要があります。シナリオを取得しますか?

[HttpPost]
[Route("unsubscribe")]
public IActionResult Unsubscribe(string userName)
{
var jobId = BackgroundJob.Enqueue(() => UnsubscribeUser(userName));
BackgroundJob.ContinueJobWith(jobId, () => Console.WriteLine($"Sent Confirmation Mail to {userName}"));
return Ok($"Unsubscribed");
}

public void UnsubscribeUser(string userName)
{
//Logic to Unsubscribe the user
Console.WriteLine($"Unsubscribed {userName}");
}

説明。
行 #5ユーザーのサブスクリプションを削除するロジックを実際に含む最初のジョブ。
行 #6最初のジョブが実行された後に続く 2 番目のジョブ。これは、親ジョブのジョブ ID を子ジョブに渡すことによって行われます。

アプリケーションを起動して Postman に行きましょう。

hangfire coont postman ASP.NET Core 3.1 の Hangfire - バックグラウンド ジョブが簡単に

hangfire coont dash ASP.NET Core 3.1 の Hangfire - バックグラウンド ジョブが簡単に

次に、ダッシュボードに移動して、成功したジョブを確認します。2 つの新しいジョブが、希望どおりの順序で実行されていることがわかります。このチュートリアルは以上です。皆さんがこれらの概念を理解し、Hangfire を ASP.NET Core アプリケーションに簡単に統合できることを願っています。

概要

この詳細なガイドでは、ASP.NET Core アプリケーションでの Hangfire のバックグラウンド ジョブ、機能、および実装の概念と、Hangfire のさまざまなジョブ タイプについて説明しました。このチュートリアルのデモに使用されるソース コードは、GitHub に投稿されています。以下にリンクを残しておきますので、参考にしてください。Hangfire の使用経験はありますか? 質問や提案はありますか?以下のコメント欄に自由に残してください。ハッピーコーディング!

ソース: https://codewithmukesh.com/blog/hangfire-in-aspnet-core-3-1/

#aspdotnet #hangfire 

ASP.NET Core 3.1 の Hangfire
Annie  Emard

Annie Emard

1625811900

Running Background Tasks in ASP.NET Core (HANGFIRE)

How to handle background tasks (fire and forget) and reoccurring background tasks inside ASP.NET Core Web Applications using Hangfire.

Blog: https://codeopinion.com/background-tasks/

🔔 Subscribe: https://www.youtube.com/channel/UC3RKA4vunFAfrfxiJhPEplw?sub_confirmation=1

💥 Join this channel to get access to source code, demos, and slides!
https://www.youtube.com/channel/UC3RKA4vunFAfrfxiJhPEplw/join

📝 Blog: https://codeopinion.com

📚 Book Recommendations

Domain-Driven Design
https://amzn.to/2QwG8sb

Patterns of Enterprise Application Architecture
https://amzn.to/3d8kMJj

Refactoring: Improving the Design of Existing Code
https://amzn.to/2NVdP5Q

Monolith to Microservices: Evolutionary Patterns to Transform Your Monolith
https://amzn.to/3srUuZ6

RESTful Web Clients: Enabling Reuse Through Hypermedia
https://amzn.to/3d8Q96B

CodeOpinon: https://codeopinion.com
Twitter: https://twitter.com/codeopinion

#aspdotnet core #hangfire #background tasks

Running Background Tasks in ASP.NET Core (HANGFIRE)
Annie  Emard

Annie Emard

1625421600

Hangfire + MediatR = Message Dispatcher

You can use two popular libraries in MediatR and Hangfire to create a pretty cool solution to move messaging out-of-process into a separate worker. Here’s how you can take these two libraries and use them together.

🔔 Subscribe: https://www.youtube.com/channel/UC3RKA4vunFAfrfxiJhPEplw?sub_confirmation=1

💥 Join this channel to get access to source code, demos, and slides!
https://www.youtube.com/channel/UC3RKA4vunFAfrfxiJhPEplw/join

Why use MediatR:
https://codeopinion.com/why-use-mediatr-3-reasons-why-and-1-reason-not/

Source:
https://github.com/dcomartin/LooselyCoupledMonolith/tree/HangfireMediatR

📝 Blog: https://codeopinion.com

📚 Book Recommendations

Domain-Driven Design
https://amzn.to/2QwG8sb

Patterns of Enterprise Application Architecture
https://amzn.to/3d8kMJj

Refactoring: Improving the Design of Existing Code
https://amzn.to/2NVdP5Q

Monolith to Microservices: Evolutionary Patterns to Transform Your Monolith
https://amzn.to/3srUuZ6

RESTful Web Clients: Enabling Reuse Through Hypermedia
https://amzn.to/3d8Q96B

0:00 Intro
0:38 MediatR Example
1:25 Configure Hangfire
2:27 MediatR Wrapper/Bridge
3:20 MediatR Extension Method
4:37 Hangfire Serialization
8:00 Hangfire Extensibility
9:53 Summary

CodeOpinon: https://codeopinion.com
Twitter: https://twitter.com/codeopinion

#dotnet #messaging #softwarearchitecture

#hangfire #mediatr #dotnet #messaging #softwarearchitecture

Hangfire + MediatR = Message Dispatcher
Annie  Emard

Annie Emard

1625407080

Scaling HANGFIRE: Processing More Jobs Concurrently

Scaling Hangfire can be done in two ways: Increase the number of worker threads per server, or increase the number of servers. You also need to be aware of the constrains of the underlying host. That could be a Docker, VM, or a Physical Host. Regardless, there are constraints of CPU and memory that you will likley need to look at to determine the right number of worker threads per hangfire server. You can scale out further by deploying many hangfire servers on different underlying hosts. Tip: Be aware of moving the bottleneck and be sure that downstream services can handle the extra load.

🔔 Subscribe: https://www.youtube.com/channel/UC3RKA4vunFAfrfxiJhPEplw?sub_confirmation=1

💥 Join this channel to get access to source code, demos, and slides!
https://www.youtube.com/channel/UC3RKA4vunFAfrfxiJhPEplw/join

📝 Blog: https://codeopinion.com

📚 Book Recommendations

Domain-Driven Design
https://amzn.to/2QwG8sb

Patterns of Enterprise Application Architecture
https://amzn.to/3d8kMJj

Refactoring: Improving the Design of Existing Code
https://amzn.to/2NVdP5Q

Monolith to Microservices: Evolutionary Patterns to Transform Your Monolith
https://amzn.to/3srUuZ6

RESTful Web Clients: Enabling Reuse Through Hypermedia
https://amzn.to/3d8Q96B

0:00 Intro to Producers & Consumers
1:39 Worker Threads
3:35 Multiple Hangfire Servers
5:05 Downstream Services

CodeOpinon: https://codeopinion.com
Twitter: https://twitter.com/codeopinion

#hangfire #dotnet #backgroundjobs

#hangfire #dotnet #backgroundjobs #scaling hangfire

Scaling HANGFIRE: Processing More Jobs Concurrently
Aron  Lemke

Aron Lemke

1621068600

Hangfire in ASP.NET Core - Easy way to Schedule Background Jobs

This article covers detail about how to integrate Hangfire in ASP.NET Core applications which is an easy way to schedule background jobs in .NET Core and .NET based applications.

Background jobs or tasks allow the programmers to execute code on a different thread but scheduling & monitoring background jobs is a difficult task to achieve. Hangfire simplifies tasks to handle background jobs in ASP.NET Core.

#background jobs #hangfire #dotnet #aspdotnet core #dotnet core

Hangfire in ASP.NET Core - Easy way to Schedule Background Jobs
Milan  Reilly

Milan Reilly

1621040340

Hangfire in ASP.NET Core - Easy way to Schedule Background Jobs

This article covers detail about how to integrate Hangfire in ASP.NET Core applications which is an easy way to schedule background jobs in .NET Core and .NET based applications.

Background jobs or tasks allow the programmers to execute code on a different thread but scheduling & monitoring background jobs is a difficult task to achieve. Hangfire simplifies tasks to handle background jobs in ASP.NET Core.

#background jobs #hangfire #dotnet #aspdotnet #aspdotnet core #dotnet core

Hangfire in ASP.NET Core - Easy way to Schedule Background Jobs
Ari  Bogisich

Ari Bogisich

1597033380

Hangfire – .NET Background Tasks

Introduction

In this article, We will discuss about the Hangfire, an open source framework, which is used to run background tasks in .NET. In general, we may need an application which run’s in the background based on the code nature, that is, it may take long time to execute and users does not want to bother about those task. We will have what are Background Task in the separate section, in this article.

Hangfire

As said before, Hangfire is an Open source framework, which simplifies the Processing and Managing Background Jobs in a reliable way. In an application, there may be have some occasion to run code in Background, that may be for a long run or may be based on the schedule. Hangfire will simplifies those background jobs, by Creating, Processing and Managing. Hangfire can be used in any type of .NET Applications.

Background Jobs

In the previous two sections, you are noticing about Background Jobs. Now you may think, what is a Background Job and when those are required. In .NET, some codes which needs to be run in the background because running it on the main thread is not appropriate, due to its nature or due to a specific requirement.

As for an example, in this article, we will create Greetings Scheduler application, which sends Greetings in Mail to the members. In simple, say for an organisation, they will have HR application and they will feed employee details. So from that data, they can schedule Birthday Wishes, Anniversary wishes Automatically. They do not need to check every month and send wishes in Mail.

Note:

This is Part one article and in this article we will have a detailed view on the Hangfire, how to install in our application and the background jobs that Hangfire can perform. The next article (last one), we will have a detailed view on Creating, Performing and Managing Background Jobs and we will apply the best practices.

Features of Hangfire

We should know why to use Hangfire over the windows job scheduler.

  • Hangfire is Simple to use. We do not need the Windows Scheduler for Background jobs.
  • Management and Visibility of the jobs. Hangfire’s provides a Dashboard, so that we can monitor, review, re-run and keep a track of all our jobs.
  • Reliability of Jobs. Hangfire ensures that our Background Job fires at least once. It does by storing our jobs in the database. If our jobs stops in a half way due to exception, Hangfire will automatically re-run the job and marks the job completed only when it is completed. How Hangfire marks as completed is, it ensures all the lines of code are executed, then only it marks as completed.
  • Can be Distributed or simple.

Hangfire’s Background Jobs

This is section, we will have what are the background job types provided by Hangfire. We will implement these types with our application in the next article. Now let’s have the job types,

  • Fire and Forget Jobs
  • Delayed Jobs
  • Recurring Jobs
  • Continuation Jobs
  • Batch Jobs
  • Batch Continuations

#.net #backgroud task #c# #hangfire #csharp #programming-c

Hangfire – .NET Background Tasks
Marcus  Flatley

Marcus Flatley

1591527780

Hangfire in ASP.NET Core 3.1 - Background Jobs Made Easy

In this article, let’s learn about Hangfire in ASP.NET Core 3.1 and how to integrate it with your Core Applications. A common programming task that we face regularly is running jobs in the background. And running these jobs properly without messing up your code is not an easy task but it isn’t hard either. I used to work with Windows services for scheduling various tasks within my C# application. Then, I come across this close-to awesome library – Hangfire, and I never left.
Background Jobs in ASP.NET Core
Essentially, Background jobs are those methods or functions that may take up a lot of time to execute (unknown amount of time). These jobs if run in the main thread of our application, may / may not block the user interaction and may seem as if our .NET Core Application has hanged and is not responding. This is quite critical for client-facing applications. Hence, we have background jobs, similar to multithreading , these jobs run in another thread, making our application seem quite asynchronous.

We should also have the possibility to schedule them in the near future so that it is completely automated. A developer’s life would be so tough without these awesome possibilities.

#asp.net core #background jobs #hangfire

Hangfire in ASP.NET Core 3.1 - Background Jobs Made Easy