Escalando aplicações com o Worker Service no .NET 6.0 – Parte 1

O Worker Service surgiu no .NET Core 3.0 e permite criar serviços hospedados em segundo plano (Background Service) de longa execução ou como ponto de recebimento de mensagens (queue ou topic) para processar um código específico de forma assíncrona. Ele veio para substituir o antigo “Windows Service” (que era necessário criar um executável que rodava somente no Windows) e pode ser utilizado tanto em Windows e Linux.

Para qualquer cenário que você tenha, seja monolithic, miniservice ou microservices, o Worker Service é ideal para separar sua aplicação em pequenos blocos, deixando sua solução mais escalável e performática.

Neste artigo, aprenderemos como criar e implantar um Worker Service utilizando o .NET 6.0 e Docker.

Pré-requisitos

  • Visual Studio 2022 (.NET 6.0)
  • Docker
  • Nuget package Serilog e Cronos

Worker Service

Para este exemplo, criaremos um Worker Service que será executado à cada minuto como um agendador de tarefas.

Para instalar este recurso, crie um novo projeto no Visual Studio e selecione o template do Worker Service:

Em seguida, selecione o nome do projeto, a versão do .NET e habilite o suporte ao Docker no Linux:

Configure a classe program.cs com o seguinte código:

O código SerilogExtension.AddSerilog() é utilizado para centralizar todos os logs do Worker Service no Serilog. Este código deve ser registrado logo no início da classe program.cs para coletar todas as informações de execução da aplicação:

O código services.AddCronJob<TimerJob>() serve para registrar a classe TimerJob que é utilizada como um agendador de tarefas, sendo executado de minuto em minuto, conforme a expressão CRON configurada: */1 * * * *”:

E por fim, configure o arquivo dockerfile com o time zone de São Paulo (ENV TZ=America/Sao_Paulo):

Testando

Execute o Worker Service local, e via console, analise os logs gerados pelo Serilog com o resultado do processamento do agendador de minuto a minuto:

Para implantar em produção, é necessário compilar o dockerfile e configurar sua execução em ambiente Windows ou Linux, utilizando por exemplo, o Service Plan Linux no Azure, o AKS Kubernetes ou simplesmente instalar o Docker e rodar localmente em sua infraestrutura.

Finalizando

O modelo Worker Service é indicado para trabalhar com serviços hospedados de longa duração ou como uma “mini aplicação” que recebe um estímulo para processar algo específico. Sem contar que ainda temos todos os recursos poderosos da plataforma .NET, como por exemplo, a injeção de dependência.

Os detalhes completos deste exemplo você encontra no meu GitHub: https://github.com/hgmauri/sample-worker-service

1 comentário

Deixe uma resposta