Skip to content

Tarefas agendadas ​

O Doggy inclui um sistema de tarefas agendadas baseado no TaskScheduler personalizado + Symfony Messenger, com suporte para execução distribuída e vários tipos de tarefas.

Visão geral ​

O sistema de tarefas agendadas localiza-se em src/Service/Task/:

src/Service/Task/
├── TaskHandlerInterface.php   # Interface de processadores de tarefas
├── TaskHandlerLocator.php     # Localizador de processadores
└── TaskScheduler.php          # Agendador

As entidades relacionadas ficam em src/Entity/System/:

EntidadeDescrição
Task.phpDefinição da tarefa (Cron, processador, parâmetros)
TaskLog.phpRegisto de execução da tarefa

Criar uma tarefa agendada ​

1. Implementar o processador de tarefas ​

php
namespace App\Task;

use App\Service\Task\TaskHandlerInterface;

class ActivateAccountByHireDateTask implements TaskHandlerInterface
{
    public function handle(array $params = []): void
    {
        // Executar a lógica de negócio
    }
}

Exemplo de tarefa existente: src/Task/ActivateAccountByHireDateTask.php

2. Registar a tarefa ​

Registo através da base de dados ou de comandos:

bash
php bin/console app:run-scheduler

Execução agendada ​

Mecanismo de implementação do TaskScheduler:

  • Lê a configuração de Task da base de dados
  • Interpreta expressões Cron
  • Localiza o processador através do TaskHandlerLocator
  • Executa de forma assíncrona com o Symfony Messenger (RunTaskMessage + RunTaskMessageHandler)
  • Regista o resultado da execução em TaskLog

Arquitetura de mensagens ​

TaskScheduler → envia RunTaskMessage
    ↓
Messenger (Doctrine Transport)
    ↓
RunTaskMessageHandler → TaskHandlerInterface::handle()
    ↓
TaskLog regista o resultado da execução

Interface de administração ​

Entrada: App\Controller\Admin\TaskController

Template: templates/admin/task/index.html.twig

  • Visualização da lista de tarefas
  • Visualização dos registos de execução
  • Acionamento manual de execução

Funcionalidades ​

  • Agendamento com expressões Cron
  • Execução assíncrona (fila de mensagens Messenger)
  • Monitorização do estado de execução (TaskLog)
  • Mecanismo de repetição em caso de falha
  • Interface de processadores extensível

Código aberto sob MIT | Copyright © 2026 Doggy