Tarefas agendadas e de segundo plano na plataforma - Hangfire

Sua plataforma possui um gerenciador de tarefas chamado Hangfire, para gerenciar tarefas recorrentes, tais como liberação de pagamento em garantia, indexação da busca, download de imagens, alteração de status de pedidos, entre outras.

O Hangfire é uma arquitetura externa acoplada à plataforma, que executa tarefas em filas de forma assíncrona, ou seja, atua na execução e gerenciamento de tarefas em segundo plano, para operações que precisam ser executadas fora do "pipeline" de processamento de requisições da sua aplicação.

Executando processamentos em segundo plano no .NET com o Hangfire - balta.io


Para acessar o Hangfire de sua plataforma basta adicionar no endereço de sua url: "/notouchme/hangfire"
Por exemplo: www.meumarketplace.com/notouchme/hangfire

Na primeira aba você verá o menu das ferramentas disponíveis, o Painel de monitoramento com o Gráfico em tempo real e Gráfico histórico, e logo abaixo no rodapé está o endpoint e demais informações referentes ao banco de dados.

170cb7d8-70c7-43a7-94be-a48a57aaff35

No Gráfico histórico você pode monitorar a quantidade de tarefas que foram concluídas e tarefas com falhas no determinado período, podendo monitorar no dia atual ou na semana atual.

b3d2e588-56c0-418f-b392-0deb38c2eae2

Exemplo de como aparece uma tarefa que apresentou falha na execução:

cf934bdf-700f-47de-9ef7-e414a218dbce

No Gráfico em tempo real, você acompanha as tarefas concluídas e/ou tarefas com falhas ocorrendo no momento em que estiver monitorando:

8a3f61ff-f939-41bf-80c7-7567f4e2f6b0

No menu das ferramentas disponíveis, começando por Tarefas:

ccf6a8e5-7e1c-4f5f-866f-2f7a0b849ff6

Você pode visualizar quais tarefas estão "Enfileiradas" (prestes a serem executadas, aguardando uma tarefa à frente ser executada para seguir com a próxima tarefa de forma assíncrona e automática).

As tarefas agendadas são as tarefas programadas para serem executadas e/ou precisam de uma ação manual para executa-las.

Em "Processando" e "Aguardando", são tarefas que foram executadas ou enviadas para "enfileiradas" e estão em fase de analise para seguir com a atualização automática ou para ir à enfileiradas para a execução na fila.

Em "Concluído" são todas as tarefas já executadas com êxito pela plataforma, desde o inicio da criação do ambiente.

Em falhas são as tarefas que obtiveram falhas da plataforma e permanecem com falhas, necessitando de uma ação manual (essa parte você verá um tópico logo abaixo para detalhar melhor).

E por fim, as tarefas removidas são tarefas que não fazem sentido para o modelo de plataforma e foram desativadas de forma manual, ou em caso de alguma tarefa em falha que depois de já corrigido, esta tarefa é removida para que o erro apontado deixe de aparecer.


Tarefas em falhas no Hangfire

Quando há tarefas em falha, será visível pela barra superior do menu, e na aba "Em falha" :

39bc22a5-116f-4684-9f37-d16528811617

As tarefas em falhas só aparecem neste painel como falha de fato, quando atingem a recorrência de 10 vezes seguidas do mesmo erro, em que a automação não conseguiu resolver sua execução e é necessário uma ação manual.

Clicando na tarefa especifica você pode visualizar os detalhes da tarefa, as recorrências, bem como opções para regressar a tarefa para a fila, ou remove-la em caso de uma correção já ter sido feita.

be86ca58-fba5-49d0-89ed-cd183f1b5531
c5a6752d-0ed1-4b87-82ef-4701d2934f6e

Em Estado você pode "subir" a tarefa para fila, ou remove-la:

fbc90594-b13b-4302-a3b5-6e8eb48580c6
41697b07-c2f5-419f-a502-34a35107d4ae

Você também pode inserir todas as tarefas em falha para regressar a fila de uma vez só, basta selecionar a quantidade de itens na pagina que corresponda a quantidade de erros, selecionar todas e seguir com a ação desejada:

b06315a7-bb3c-45bf-b733-2114f732a7ea

Menu Retentativas:

Esse menu é acessado quanto uma tarefa apresenta erro, e fica na fila de retentativas até completar o ciclo de 10 tentativas para ir a fila de erros.

Tela sem erros:

71b93204-d61e-4795-a97f-604760851f17

Tarefas recorrentes

São todas as tarefas da plataforma, você pode visualiza-las e executa-las antes do fluxo automático de execução.

56d4f449-df0c-4290-8b4b-433afed6dab6

Cada tarefa é executada automaticamente com sua recorrência especifica, ou seja, tarefas como analise de liberação de saldo são executadas diariamente, mas há tarefas com intervalo de execução em minutos, etc. E esses intervalos são instanciados no codigo fonte.

Acesse em seu codigo fonte a classe: ApplicationStartup.cs

6d56f375-a4ef-4762-b054-a6b01de599a4

Tarefas definidas em "Enqueue" são aplicadas de forma imediata, no momento de execução do codigo fonte ou das tarefas diretamente no Hangfire de forma manual.

Tarefas definidas como "Schedule" são as tarefas agendas, onde é definido o intervalo de tempo e entre parentes a hora e minuto da recorrência de execução.

Tarefas como "CreateRecurring" são recorrentes e agendadas.

Nesse exemplo abaixo, a tarefa executa diariamente (daily) as 03:05 AM:

3e4d8511-ad6b-4c32-bfb1-a559cabd9739

Toda a infraestrutura do Hangfire é encontrada em Libs/Infra.Crosscutting.Hangfire;

36b68ee4-6af5-45d3-aa03-6ef47568817b

Significado das tarefas recorrentes:

ID

CheckStatusForTransactionsPendingPayment:

DoAutoCloseOrders:

RefreshSellerProfilesValidationState:


UpcomingCompletionNotification:

CalculateProductPricesDaily:

UpdateIndicesJob:

CheckExpiredRatings:


FixStuckOrders:

UpdateSubscriptionsStatusFromGateway:

SetEscrowReleaseDateForRecentlyFinishedRentals:

SuspendExpiredManualSubscriptions:

InsertStockTransactionToProduct:

DoScheduledTransfers:

DownloadProductsImagesAndUpload:

CleanOldCachedImportationFiles:

RefreshBankListFromWebReference:

CheckExpiredRatings:

RemoveOldImportationLogs:

VerifyAbandonedCartsAndSendEmailToBuyer


ReleaseEntriesWithEscrowBlocked

Significado

Verifica o estado das transações pendentes de pagamento.

Conclui pedidos se estiverem pagos e entregues ao comprador após o prazo em garantia.

Atualiza Perfis de Vendedor nos Estado de Validação, ou seja, deixa o perfil incompleto ou completo de acordo com o cadastro atual do vendedor.

Próxima Notificação de Conclusão.

Calcula diariamente os preços dos produtos.

Atualiza os índices de pesquisas da plataforma. Processo gerenciado pelo projeto: libs/Infra.SmartSearchAdapter.

Verifica Classificações Expiradas.

Fixar Encomendas Presas de tarefas Recorrente.

Actualização do estado das assinaturas a partir do Gateway.

Fixar a data de liberação do Escrow para alugueres recentemente terminados.

Suspende assinaturas Manuais Expiradas.

Inserir transação de estoque ao produto, atualizando o estoque atual do produto conforme o status do pedido.

Tarefa que faz a transferência de saldo para as respectivas contas bancários.

Download de imagens e Upload de produtos na plataforma.

Arquivos de Importação de Cache antigo:

Atualiza a Lista de Bancos de Referência na Web.

Verificar Classificações Expiradas

Remover os Registos de Importação Antigos.

Envia os emails dos carrinhos abandonados diariamente.

Faz a liberação de saldos que estejam bloqueados se houver.


Servidores

Em Servidores você pode ver seu servidor e as filas que correspondem aos pontos específicos:

DEFAULT, WEBHOOKS, EMAILS, STOCKPROCESSING

364c4962-b57f-45a4-b760-b51a101f18e2

Em sua plataforma, nas configurações da aba gestão, você pode configurar os Dias de expiração das tarefas inativas ou demais critérios:

70d4fb1e-ea76-4314-9bf6-fc795a350561


Como corrigir erros de indexações de sua plataforma?

Quando há erros de atualização de itens da plataforma, como atualização de imagens, textos entre outros índices de busca, uma solução para resolver o problema é limpando as indexações manualmente.

Para isso siga o processo abaixo:

1º - Abra o Windows rdp de sua plataforma (os acessos estão na pasta de entrega do seu codigo fonte em "seumarketplace-configuracoesdenuvem.zip").

0ff87a8a-b7ff-41ad-b48b-82082edd95e6
f4953acc-c32b-4298-9000-b8cbc795c574
44f06216-1fc6-4e1d-b908-017e0b91b44e

Ao acessar o Windows RDP procure pela pasta: searchindex
Dica: Siga os caminhos da print abaixo caso tenham alguma duvida:

Por boas praticas, recomendamos que façam uma copia da pasta na área de trabalho para garantias (backup).

2º - Abra a pasta searchindex e abra as pastas que estiverem dentro dela, delete  apenas os arquivos e não as pastas (delete apenas os arquivos dentro das pastas "facets" e "mainindex"):


3º - Feito isso, verifique se não há mais arquivos a serem deletados e acesse o hangfire da plataforma utilizando: /notouchme/hangfire:
https://www.exemplo.com/notouchme/hangfire

4º - Suba para a fila as tarefas agendadas:

93d36c8b-095c-4582-9b85-c565417c45af


5º - Por garantias também dispare as tarefas recorrentes:

77e0047b-aa49-4a39-a008-bc756273b2fe

Learn more about Hangfire with the official docs.

Hangfire does not require you to create special classes. Background jobs are based on regular static or instance methods invocation.

var client = new BackgroundJobClient();
client.Enqueue(() => Console.WriteLine("Easy!"));
client.Delay(() => Console.WriteLine("Reliable!"), TimeSpan.FromDays(1));

There is also more easy way to create background jobs – the BackgroundJob class that allows you to use static methods to perform the creation task.

BackgroundJob.Enqueue(() => Console.WriteLine("Hello!"));

The control is returned to a caller just after Hangfire serializes the given information and saves it to the storage.

🔵 Bonus

Nice trick with HangFire + MediatR: