Hangfire o cómo ejecutar tareas en background desde ASP.NET Core

Muchas veces nos enfrentamos a problemas en los cuales la solución (o parte de ella) consiste en ejecutar una tarea en “background”En .NET esto lo hacemos utilizando un servicio de Windows o simplemente una aplicación de consola, que se ejecuta como una tarea programada desde el Windows Task Scheduler.

Sin embargo, existen otros modos de hacerlo, incluso en la nube, como es el caso de los WebJobs de Azure.

Recientemente utilicé otra variante: ASP.NET Core + Hangfire. Y quisiera compartirla.

Hangfire al ataque

Hangfire es un framework open source, para .NET y .NET Core, que nos permite lanzar procesos en background de una manera muy fácil. Es gratis, aunque para utilizar algunas funcionalidades adicionales se debe pagar una suscripción.

¿Cómo se usa?

Para utilizarlo debemos instalar en nuestro proyecto ASP.NET (Core) el paquete nuget de hangfire.

Luego, configuramos en la clase Startup los servicios y los componentes middleware respectivamente:

Sql Server es el almacenamiento que utiliza Hangfire por defecto. Aunque también están MSMQ y Redis (lamentablemente, Redis no está en la versión gratis).

Ejecutando las tareas

Lo que sigue es cómo se lanzan las tareas (o jobs).

Esta es la más simple, lanzar una tarea en background:

También podemos aplazar la ejecución de una tarea. Por ejemplo enviar un correo de seguimiento o retroalimentación al día siguiente que un cliente realizó una compra online.

Igualmente se pueden ejecutar tareas recurrentes. Lo he empleado en procesos de automatización, cuando he necesitado que una acción corra periódicamente:

El Dashboard

Cuando levantamos nuestra aplicación automáticamente nos incorpora un dashboard, al que podemos acceder a través de la URL “/hangfire” (así es por defecto, aunque lo podemos configurar). En este panel podemos ver todas las tareas, así como gráficos de tiempo real e histórico de lo que ha estado sucediendo.

Al panel se puede acceder sin problemas localmente (localhost). Pero para utilizarlo en producción u otro ambiente no local, es necesario configurar un mecanismo de autorización.

Resumiendo

Lo anteriormente expuesto es solo una introducción. Los invito a que lean la documentación oficial para que profundicen en todas las posibilidades que nos ofrece este framework.

Solo me queda recomendarles que lo utilicen en sus proyectos, por su sencillez, versatilidad y por tener incorporado el panel, donde pueden ver lo que está sucediendo con sus tareas.

En un próximo post, traeré un ejemplo real, con el código detallado.

Por último, me gustaría que comentaran cómo podemos hacer esto o algo similar en otros lenguajes.

The following two tabs change content below.

Carlos Martinez

Desarrollador .Net Senior, con +10 años utilizando la plataforma Microsoft .NET. Experiencia en .Net Core. Enfocado en soluciones de backend(REST API, WCF, Clean Architecture, Entity Framework, programación concurrente: Task Parallel Library). Bases de datos relacionales (Sql Server, My SQL), así como con No SQL (MongoDB, LiteDB). Apasionado al desarrollo ágil, Scrum (certificado PSM I) y Cloud Computing (AWS). Conozco un poco Java y Python.

Latest posts by Carlos Martinez (see all)

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *