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 # AgendadorAs entidades relacionadas ficam em src/Entity/System/:
| Entidade | Descrição |
|---|---|
Task.php | Definição da tarefa (Cron, processador, parâmetros) |
TaskLog.php | Registo 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-schedulerExecuçã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çãoInterface 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