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