Hangfire processamento background com resiliência em suas aplicações .Net Core

Fernando Mendes
Nov 4 · 5 min read

Olá pessoal, tudo bem?

Em vários projetos eu tive que criar processos em segundo plano, o famoso processo batch ou robô, para processar algum arquivo, com ou sem agendamento, processos as vezes de transformação de dados, enfim.. você ai desenvolvedor, deve já ter feito no decorrer da sua carreira, várias coisas do tipo.

Podemos fazer de várias formas, mas uma delas, e de forma muito fácil, é utilizando o Hangfire.

Uma das funcionalidades mais legais dele, é que nativamente ele aplica a resiliência, que quer dizer por exemplo, a cada execução com erro no processo, ele faz a re-tentativa da execução.

E o mais importante = Aberto e gratuito para uso comercial.

Existe sim uma versão paga, denominada Hangfire Pro, com diferenças da versão gratuita.

Mas vamos lá, vou criar um exemplo de como utilizar o Hangfire

Vamos criar uma WebApi

Agora vamos instalar as dependências do Hangfire no projeto:

PM>> install-package Hangfire

O Hangfire, utiliza uma base de dados para controlar as execuções dos processos, que serão agendados. Para isso temos que configurar uma base de dados para que funcione corretamente.

Você pode usar os seguintes banco de dados:

  • Sql Server
  • Mongo
  • MySql
  • PostGre

Para o nosso exemplo, vamos usar o MongoDb. Para isso, vamos instalar a dependência respectiva.

PM>> install-package Hangfire.Mongo

Precisamos agora adicionar no Startup.cs, a configuração do Hangfire.

No método ConfigureServices, iremos configurar a conexão com a base de dados que iremos usar.

Veja, que adicionamos na linha 13 o Hangfire na aplicação, configurando o MongoDb como base de dados, para o controle das execuções.

Para que o Hangfire crie suas tabelas para seu funcionamento, adicionamos configurações de migração, ou seja, quando a aplicação se inicializar, as tabelas de controle serão criadas na base de dados.

No método Configure, vamos configurar que essa aplicação será o servidor do Hangfire e ativar o Dashboard para acompanhamento dos processos que estão em execução.

Agora execute a aplicação: http://localhost:58977/hangfire

Dashboard do Hangfire

Veja que neste Dashboard existem algumas abas de acompanhamento dos processos.

Tarefas : Onde você acompanha os processos que estão sendo executadas;

Retentativas: Acompanhamento dos processos que estão sendo repetidos, por não sucesso de execução;

Tarefas Recorrentes: Acompanhamento dos processos que estão agendados;

Servidores: Servidores ativos do Hangfire

MongoDb com as tabelas criadas pelo Hangfire

Agora, precisamos entender qual processo do Hangfire, vamos usar em nossa aplicação. Na versão gratuita, temos 4 opções de processamento:

Fire-and-forget jobs

Inicia imediatamente o processo que quer executar

Delayed jobs

Faz o agendamento do processo que quer executar. No exemplo abaixo, irá ser processado daqui 7 dias.

Recurring jobs

Faz o agendamento recorrente do processo. No exemplo abaixo, irá ser executado diariamente.

Continuations

Faz com que um processo seja executado novamente, pelo Id da execução.

Vamos criar, um exemplo em nossa aplicação, para entender melhor o funcionamento do HangFire

Crei um método chamado DivisionRandom(). Esse método irá fazer uma divisão com dois números randômicos. Caso tenha alguma divisão por 0, irá acontecer uma exceção, fazendo que o HangFire, faça a re-tentativa desse processo até 10 vezes;

Vou configurar a chamada do método, para ser executado pelo Hangfire

Irei usar neste exemplo o Recurring Jobs, para que o processo seja executado a cada minuto.

Ao ser iniciado a aplicação, no Dashboard já consta como Tarefa recorrente.

Tarefas recorrentes

Depois de um minuto, o processo se inicia. Acompanhe pelo Dashboard

Acompanhamento dos processos em execução

Veja que existe na seção Processando a quantidade de processos sendo executados.

Caso execute com sucesso, na seção Concluído somará a quantidade dos processos executados;

Agora, vamos ver quando o processo é executado com erro;

Processo executado com erro

Veja neste exemplo, na seção Agendadas, que existe um processo que deu falha, e o Hangfire, o colocou para agendamento.

No menu Retentativas, perceba que existe um processo adicionado na fila de tentativas;

Fila de retentativas

Depois do tempo estipulado, ele irá re-tentar executar o processo

Execução com a segunda retentativa

E novamente o processo foi executado com erro. Visualize na figura acima, que na coluna motivo, está o número da tentativa de sucesso do processo.

Caso execute com sucesso, irá ser adicionado na seção Concluído.

Veja todo o histórico das execuções na seção Concluído

Histórico das execuções

Clique em um deles, e veja o detalhamento da execução:

Bom pessoal, aqui está uma ferramenta bem legal, para processamentos em segundo plano e muito fácil de se usar . Dependendo do seu projeto, isso poderá se encaixar perfeitamente.

Espero que vocês tenham gostado..

Segue o exemplo em meu Github:

Grande abraço..

Até a próxima!

XP Inc.

Aqui você vai encontrar os principais conteúdos de tecnologia da XP Inc.

Fernando Mendes

Written by

Software Architect .NET, C#, Co-Founder community JunDevelopers

XP Inc.

XP Inc.

Aqui você vai encontrar os principais conteúdos de tecnologia da XP Inc.

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade