Cron Jobs — Hangfire com dotnet 6 -Conceitos

Douglas Modesto
Guide Lab
Published in
6 min readJul 10, 2022
Hangfire and.Net 6

Olá pessoal, tudo bem com vocês?

Vamos falar um pouco sobre Cron Jobs e suas aplicações.

Possivelmente, em algum momento na sua carreira, você já teve a necessidade de fazer algum tipo de processamento em massa e esse processamento deveria ser realizado em um horário onde o fluxo de clientes fosse mínimo para evitar lentidão na utilização dos serviços da sua empresa.

A galera das antigas certamente já devem ter passado por algo parecido, de encerrar a jornada de trabalho porém ter que conectar altas horas da noite pra executar algum processo, falo por experiência própria.
Bons tempos, só que não (contém ironia rsrs).

Pois bem, para resolver esse tipo de situação, temos os Cron Jobs. Cron Jobs são como as tarefas agendadas do Windows, são tarefas executadas automaticamente a cada X tempo.

O Cron Job é uma ferramenta de agendamento que permite controlar tarefas a serem executadas em tempos pré-configurados. Através dela é possível configurar tarefas automaticamente, isso significa que você pode definir rotinas a serem executadas em um horário pré-definido.

Fazendo uma analogia à vida real, quando você leva o lixo para fora de casa, provavelmente você o faz seguindo sempre um mesmo intervalo de tempo, de 2 em 2 dias por exemplo que geralmente é o período que o caminhão da coleta recolhe os lixos residênciais, nesse cenário, a coleta do lixo é Job. Entendeu?

Acredito que o propósito mais comun para utilização de Cron Jobs em sites ou sistemas, seja a rotina de backup, scripts que rodam diariamente para realizar backup do banco de dados, ou que faça alguma integração com sistemas de fornecedores.

No “Mundo dotnet” temos o famoso, Worker Service.
O Worker Service surgiu no .NET Core 3.0 e permite criar serviços hospedados em segundo plano (Background Service) para executar um código específico de forma assíncrona e pode ser utilizado tanto em Windows quanto no Linux.
Ele veio para substituir o antigo “Windows Service” (rodava somente no Windows).
O Worker Service é um projeto .NET construído usando um modelo que fornece alguns recursos úteis que transformam um aplicativo de console comum em algo muito mais poderoso. Ele é executado basedo no conceito de um host, que mantém o tempo de vida da aplicação. O host também disponibiliza alguns recursos familiares, como injeção de dependência, registros e configurações.

Terminologias

Muitos termos são usados erroneamente como sinônimos.
Vamos listar abaixo alguns desses termos para tornar sua intenção mais objetiva e aparente.

  • Serviços em segundo plano (BackgroundService): refere-se aos tipos que são executado de forma assíncrona, em outro momento pré determinado.
  • Serviço Hospedado (Hosted Service): refere-se a implementação da interface IHostedService
  • Serviço de execução longa (Long-running Service): Qualquer serviço executado continuamente
  • Serviço de Windows (Windows Service): A infraestrutura de serviço do Windows, originalmente centrada no .NET Framework, mas agora acessível por meio do .Net.
  • Serviços de Trabalho (Worker Service): Refere-se ao modelo de serviço de trabalho.

Neste artigo eu gostaria de comentar um pouco sobre o Hangfire, um framework que facilita a execução e gerenciamento de jobs e como podemos configurá-los e utilizá-los.

O que é o Hangfire?

O Hangfire é uma biblioteca open-source gratuita e também tem um versão para uso comercial, disponível no nuget.org, ele facilita a criação, execução e gerenciamento de jobs que são executados em segundo plano de forma recorrente ou não.
É simples de utilizar e oferece um excelente dashboard para gerenciamento dos jobs.

dashboard Hangfire

Algo importante a ser mencionado é que, a versão gratuita permite a utilização comercial.

Como funciona?

Para gerenciar a execução dos seus Jobs, o Hangfire utiliza um banco de dados, que por padrão é o Sql Server, mas também tem suporte a outros bancos de dados como MySql, PostgreSql ou MongoDB

Trabalhos de Segundo plano são uma parte importante de uma aplicação e o Hangfire garante que qualquer tarefa seja executado pelo menos uma vez.
Para manter as informações de trabalho em segundo plano entre as reinicializações do aplicativo, todas as informações são salvas em seu armazenamento persistente preferido. Atualmente, os seguintes armazenamentos são suportados:

Bancos de dados suportados pelo Hangfire

O sub-sistema de armazenamento é abstraído o suficiente para suportar soluções RDBMs e NoSQL. Se por acaso seu sistema de banco de dados favorito ainda não for suportado. Você pode implementá-lo. Ainda sim, será mais barato do que implementar um sistema de Cron Job do zero.

O hangfire disponibliza alguns tipos diferentes de jobs, iremos passar brevemente por cada um deles.

tipos de jobs disponíveis no hangfire

Fire-and-forget

Esses trabalhos são executados apenas uma vez e quase imediatamente após serem disparados.

codigo fire-and-forget

Delayed

Os trabalhos atrasados também são executados apenas uma vez, mas não imediatamente, somente após o intervalo de tempo especificado. Os trabalhos atrasados também são executados apenas uma vez, mas não imediatamente, somente após o intervalo de tempo especificado.

codigo Delayed

Recurring

Trabalhos recorrentes são disparados muitas vezes no agendamento CRON especificado.

código Recurring

Continuations

Esses trabalhos são executados apenas uma vez e quase imediatamente após serem disparados. As continuações são executadas quando o trabalho pai é concluído.

Código Continuations

Batches

Lote é um grupo de trabalhos em segundo plano criados atomicamente

código Batches

Batch Continuations

A continuação do lote é acionada após a conclusão de todos os trabalhos em segundo plano em um lote pai.

código Batch Continuations

Background Process

Use-os quando precisar executar processos em segundo plano continuamente durante toda a vida útil da sua aplicação.

codigo Background Process

Novas tentativas automáticas

Se seu Job em segundo plano encontrar um problema durante sua execução, ele será repetido automaticamente após alguns atrasos. O Hangfire lida com sucesso com os seguintes tipos de problemas:

  • Exceções
  • Desligamento de aplicação
  • Terminações inesperadas de processos

Você também pode tentar novamente qualquer Job em segundo plano manulamente pormeio do código de programação ou por intermédio da interface do painel do usuário.

interface Hangfire — Retries

UI de monitoramento Integrado

O Hangfire é fornecido com uma ferramenta incrível — web monitoring UI.
Ele é implementado como uma extensão OWIN e pode ser hospedado dentro de qualquer aplicação Asp.Net, Console ou Windows Service.

Interface Hangfire

A IU de monitoramento permite que você veja e controle qualquer aspecto do processamento de trabalho em segundo plano, incluindo estatistica, exceções e histórico de Job em segundo plano.

Com isso espero que tenha conseguido passar um pouco dos conceitos sobre Cron Jobs e o Hangfire.

Conclusão

Nesse artigo tentei consolidar um pouco das informações das pesquisas que realizei pra tentar entender como os Crons Jobs funcionan.

Para que este artigo não fique tão longo, irei dividi-lo em duas partes, onde essa primeira parte fica como a parte conceitual e a segunda como a parte prática.

Então nos vemos na segunda parte.

Para acessar o segundo artigo dessa série, colocar a mão na massa e então criar e configurar um cronjob utilizando Hangfire, clique aqui.

Por enquanto é isso, até a próxima pessoal.

Referências:

--

--

Douglas Modesto
Guide Lab

Pos Graduado em Inteligência Artificial e Arquitetura de Software distribuídos apaixonado por tecnologia, aprendendo a aprender ao mesmo tempo que ensina.