Hangfire e Filas Descentralizadas: Guia Prático para Desenvolvedores .NET

Na arquitetura moderna de software, o processamento de tarefas em segundo plano é essencial para escalabilidade e experiência do usuário. Hangfire é uma biblioteca poderosa para .NET que permite gerenciar e processar jobs em uma fila descentralizada sem depender de serviços externos. Este artigo explica seus conceitos, benefícios, casos de uso e um exemplo prático.


O que é Hangfire?

Hangfire foi criado para simplificar o processamento em segundo plano em aplicações .NET. Ele permite agendar e executar jobs de forma assíncrona sem gerenciar manualmente threads, timers ou filas.

Principais recursos:

  • Armazenamento persistente de jobs (SQL Server, PostgreSQL, Redis, etc.).
  • Dashboard para monitoramento e gestão.
  • Suporte para jobs agendados, recorrentes e “fire-and-forget”.
  • Escalabilidade com múltiplos nós.

Conceito de Fila Descentralizada

Uma fila descentralizada significa que o agendamento e a execução das tarefas são distribuídos, sem depender de um serviço centralizado como AWS SQS ou Azure Service Bus.

Benefícios:

  • Menor dependência de serviços externos.
  • Infraestrutura mais simples para tarefas internas.
  • Melhor integração com o código .NET existente.

Comparação com filas tradicionais:

RecursoFila Descentralizada (Hangfire)Fila Centralizada (AWS SQS, RabbitMQ)
InfraestruturaEmbutida no appServiço externo
LatênciaBaixa (processamento interno)Média/alta (dependente de rede)
EscalabilidadeWorkers horizontaisConsumidores horizontais

Quando o Hangfire Ajuda?

Exemplos:

  • Envio de e-mails em massa em plataformas SaaS.
  • Processamento de imagens em pipelines de conteúdo.
  • Sincronização de dados entre sistemas.
  • Geração de relatórios sem travar a interface.

Projeto Exemplo: Envio de E-mails com Hangfire no .NET

Vamos criar uma aplicação simples que coloca um job de envio de e-mail na fila.

using Hangfire;
using Hangfire.MemoryStorage;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using System;

class Program
{
    static void Main(string[] args)
    {
        var host = Host.CreateDefaultBuilder(args)
            .ConfigureServices((context, services) =>
            {
                services.AddHangfire(config => config.UseMemoryStorage());
                services.AddHangfireServer();
            })
            .Build();

        using (var server = host.Services.GetRequiredService<IBackgroundJobClient>())
        {
            server.Enqueue(() => SendEmail("usuario@example.com"));
        }

        Console.WriteLine("Job enfileirado. Pressione qualquer tecla para sair...");
        Console.ReadKey();
    }

    public static void SendEmail(string email)
    {
        Console.WriteLine($"Enviando e-mail para {email} às {DateTime.Now}");
        // Simulação de envio
    }
}

Passos para executar:

  1. Instale os pacotes NuGet:

    dotnet add package Hangfire.Core
    dotnet add package Hangfire.MemoryStorage
    
  2. Rode a aplicação: dotnet run

  3. Veja no console a execução do job.


Integração com Outros Sistemas

O Hangfire pode trabalhar junto com:

  • RabbitMQ para arquiteturas orientadas a eventos.
  • Kafka para streaming de alta performance.
  • AWS SQS em arquiteturas híbridas.

Veja também: Implementing Hosted Services in ASP.NET Core


Boas Práticas e Cuidados

Boas práticas:

  • Use armazenamento persistente (PostgreSQL, Redis) em produção.
  • Monitore via Dashboard do Hangfire.
  • Configure políticas de retry para falhas temporárias.

Cuidados:

  • Evite armazenamento em memória em produção.
  • Escalone corretamente os workers.
  • Proteja o dashboard com autenticação.

Referências Externas


Conecte-se comigo no LinkedIn para conversar sobre Hangfire e arquiteturas escaláveis.