
Ecosistema .NET: Jobs con Hangfire
Si en algún momento te planteaste implementar la ejecución de tareas programadas dentro del ecosistema .NET, es muy probable que hayas escuchado de Hangfire. Una librería open source del ecosistema .NET que permite implementar tareas o trabajos en segundo plano de forma programática, es decir, con código.
Haciendo un poco de historia, cuando en el ambiente .NET y Microsoft se quería implementar procesos en segundo plano y tareas, normalmente se recurría a los clásicos Windows Service, los Task Scheduler de Windows o al uso de la librería Quartz.NET, cada uno con sus pros y limitaciones, pero servían para dar soporte a esta necesidad.
Con el auge de los servicios en cloud, nacieron servicios que abordaban en parte esta necesidad, servicios como Azure WebJobs dentro de App Service, Azure Functions y Azure Logic Apps.
Como se puede entender, existían y siguen existiendo un amplio abanico de alternativas para poder implementar Background Jobs y Task Scheduler. Entonces, ¿por qué Hangfire resultó tan llamativo para la comunidad de desarrolladores?
Hangfire llega a la comunidad como una alternativa que se enfoca en los siguientes puntos:
- El desarrollo y configuración es 100% programática, creada para desarrolladores .NET; por lo tanto, es compatible con inyección de dependencias, logging, y se pueden ejecutar procesos complejos sin necesidad de recurrir a plataformas, ya sea por licencia o en nube, que te cambien el mindset.
- No te ata a la nube. Con .NET moderno, ahora multiplataforma, Hangfire es una alternativa para entornos Linux y Windows On-Premise. Incluso se puede desplegar en servicios Cloud como App Service o contenedores persistentes, por si deseas implementarlo en la nube.
- Combina muy bien simpleza + persistencia + resiliencia. Con las alternativas como Quartz.NET y Windows Service, el manejo de estado y persistencia es muy complejo, ya sea porque no tienen las capacidades o porque son muy complejas de configurar. Hangfire te da por default lo siguiente: persistencia automática, reintentos y orquestación para escalar y distribuir carga. Esto lo logra porque hace persistencia en base de datos y la utiliza como bus de coordinación, por lo cual múltiples instancias corriendo Hangfire se pueden conectar a la misma base de datos.
- Es muy amigable al desarrollador, esto por la configuración simple y además te brinda un dashboard para seguimiento y monitoreo de los trabajos.
- La base de datos o el Job Storage es compatible con múltiples motores como SQL Server, PostgreSQL, MongoDB, entre otros.
Hangfire es una alternativa Open Source que expone la mayoría de capacidades para uso libre y con una licencia profesional de costo, que brinda capacidades adicionales.
¿Qué tipos de trabajos se puede implementar con Hangfire?
- Lanzar y olvidar trabajos. En su forma más básica, Hangfire permite encolar trabajos que se ejecutarán inmediatamente sin bloquear el hilo actual.
- Retrasar trabajos. Consiste en agregar trabajos en la cola que se ejecutarán una sola vez, no inmediatamente, sino después de un intervalo de tiempo especificado.
- Programar un trabajo. Consiste en agregar un trabajo para que se ejecute de forma recurrente con una programación especificada, normalmente con expresiones CRON.
- Trabajos continuados. Básicamente, consiste en ejecutar un trabajo después de culminado un trabajo inicial; con esto se podrían simular workflows mediante código.
- Por otro lado, bajo la licencia profesional se pueden implementar trabajos tipo en lotes.
Para complementar el artículo dejo un repositorio de ejemplo para correr Hangfire en modo local con SQLite y que implementa los tipos de trabajos antes mencionados.
Repositorio Ejemplo Hangfire con SQLite :)
Conclusión
Hangfire es una buena opción para implementar Background Jobs y Workers. Representa una alternativa intermedia para los que no se quieren amarrar con servicios Cloud y desean tener la flexibilidad del código.
Sígueme en Linkedin para estar al tanto de mis publicaciones y novedades