Ir al contenido principal

Hangfire, si no lo estás usando, estás haciendo algo mal (.NET world)

Hangfire es una librería espectacular que permite encolar tareas en un servidor de tareas que funciona dentro de tu aplicación web. Existen varios tutoriales que muestran de manera bastante sencilla cómo puedes ir integrando esto a tu aplicación.

En esta publicación vamos a repetir, pero en español, y sobretodo vamos a tratar de ir lo más al punto posible.

Qué es?

Es una librería que la cargas a través de NUGET como cualquier otra librería. En realidad tenemos que cargar 3 librerías pero eso lo veremos más adelante. Una vez que hayas cargado todo lo necesario en tu aplicación web tendrás lo siguiente:
  • Un servidor de colas: es decir, un lugar al cual le puedes mandar hacer cosas y no se olvida de esas cosas y las va ejecutando a medida que puede o tiene tiempo. Esto es muy útil para que tu aplicación no pierda tiempo haciendo algo que no necesita realmente hacer en ese instante y devolver más rápido al usuario final.
  • Un tablero de control de colas: una serie de páginas web ya preparadas dentro de tu aplicación que muestran el estado de las colas que se están ejecutando.
  • Objetos para interactuar con las colas: Un conjunto de objetos de la librería que podemos utilizar para indicarle que queremos enviar un trabajo, que queremos programar un trabajo, que queremos anular algún trabajo, etc.

Instalación

Para instalar esta libreria es muy sencillo, solamente tienen que integrar estas 3 librerías en su aplicación:

Luego se deben colocar un par de cosas en la clase Startup del proyecto web que tengan en Core


public void ConfigureServices(IServiceCollection services)
{
    …

    // Additional Services
    string sqlServerConnection = Configuration.GetSection("ConnectionStrings").GetSection("DBConnectionString").Value;
    var optionsSqlServerStorage = new SqlServerStorageOptions
    {
        SlidingInvisibilityTimeout = TimeSpan.FromMinutes(5),
        QueuePollInterval = TimeSpan.Zero
    };
    services.AddHangfire(config => config.
        UseSqlServerStorage(sqlServerConnection, optionsSqlServerStorage).
        SetDataCompatibilityLevel(CompatibilityLevel.Version_170));
    services.AddHangfireServer();


Lo que hace este código es configurar para que hangfire trabaje con el SqlServer en la dirección que le hemos indicado y que comience el servidor de hangfire para poder atender todas las colas que enviemos. En la configuración también se ha puesto el polling Interval sugerido en la documentación.

Como ya es costumbre, el módulo ejecutará un update database que le permita colocar todas las tablas necesarias en la base de datos para el manejo de Hangfire con SqlServer. A continuación las tablas que Hangfire seguramente creará la primera vez que corra su aplicación.

Servicios recurrentes

Los servicios recurrentes son todos aquellos que pasan con cierto intervalo en nuestra aplicación. Para colocarlos se pone un comando en el hangfire con el nombre específico que se utilizará para ese servicio.


public void Configure(IApplicationBuilder app, IWebHostEnvironment env,
    ApplicationDbContext dbContext,
    IRecurringJobManager jobManager,
    IJobsAppService jobs)
{
    ...
    app.UseRouting();

    // Hangfire
    jobManager.AddOrUpdate(
        "MailSender_Every_0min",
        () => jobs.RecurrentJob(),
        "* * * * *");
    app.UseHangfireDashboard();

    // Who are you?
    app.UseAuthentication();
    ...
}

También se puede definir una tarea simple de una sola vez con el objeto IBackgroundJobClient. Puede ver mucho de eso en la documentación, pero con lo mostrado debería ser suficiente para comenzar a elaborar su aplicación.

El tablero de control Hangfire

En los servicios se puede ver que hemos configurado también el poder ver el tablero de control de Hangfire. Para acceder a este tablero de control solamente se debe entrar a la dirección de nuestra aplicación en la carpeta hangfire.

Expresiones de CRON

Averigue cómo se crean las expresiones cron y cómo deben definirse para saber cuándo y cada cuánto se ejecutará una tarea en Hangfire. Un recurso útil aquí

Despliegue de la aplicación

Para que el NO servicio que es Hangfire funcione correctamente necesita que el IIS esté corriendo todo el tiempo. Para ello se puede configurar como se indica en este enlace.

Comentarios

Entradas más populares de este blog

Instalaste Docker y se come espacio en tu disco

Básicamente este post traduce la ayuda que vi en la siguiente página: https://stackoverflow.com/questions/62441307/how-can-i-change-the-location-of-docker-images-when-using-docker-desktop-on-wsl2 Entonces, la instalación que hice en mi máquina fue la siguiente: Activar Virtualización en el BIOS Instalar Docker Elegir que el motor linux se manejará con WSL2 En este caso tenemos dos cosas a tomar en cuenta: El archivo de SWAP que utiliza docker para los contenedores El archivo donde se guardan todas las imágenes. En ambos casos el lugar de los archivos que se usan están en la carpeta del usuario. A veces este lugar puede crecer mucho y nos quedamos sin espacio en disco. Liberando el SWAP de docker Primeramente vamos a parar el servicio de docker. Luego, En la carpeta del usuario se encuentra un archivo llamado .wslconfig. Solamente se lo debe editar y cambiar la línea # Sets swapfile path location, default is %USERPROFILE%\AppData\Local\Temp\swap.vhdx swapfile=E:\\temp\\wsl-swap.v...

Tenga cuidado con sus presentaciones

Por supuesto, todo hemos escuchado la frase de "no caer en una presentación muerta de Powerpoint". Aquí algunos datos que te pueden servir para el futuro para hacer buenas presentaciones. Powerpoint es muy bueno, pero ahí debes colocar las ideas principales, lo que digas durante la presentación es algo completamente distinto. Todas las presentaciones que tienen éxito en SlideShare tienen poco texto, imagenes que ocupan la mayor parte del espacio, enlaces a videos, y mucha información clave... que es muy diferente de mucha información. Un paquete que vale la pena investigar y al menos hacer una o dos presentaciones es Prezi . Cuando lo utilices toma en cuenta que primero tu presentación debe estar ordenada en forma de mapa mental. Ahora, una vez que tienes tu presentación tamibén debes preparar cómo la vas a presentar y dónde lo vas a hacer: Si la haces al vivo, tienes campo para caminar en el lugar? Si la haces por Internet, ya probaste el software que van a usar...