Tareas programadas
Doggy incluye un sistema de tareas programadas basado en el TaskScheduler personalizado + Symfony Messenger, con soporte para ejecución distribuida y múltiples tipos de tarea.
Descripción general
El sistema de tareas programadas se encuentra en src/Service/Task/:
src/Service/Task/
├── TaskHandlerInterface.php # Interfaz del procesador de tareas
├── TaskHandlerLocator.php # Localizador de procesadores
└── TaskScheduler.php # ProgramadorLas entidades relacionadas están en src/Entity/System/:
| Entidad | Descripción |
|---|---|
Task.php | Definición de tarea (Cron, procesador, parámetros) |
TaskLog.php | Registro de ejecución de tareas |
Crear una tarea programada
1. Implementar el procesador de tareas
php
namespace App\Task;
use App\Service\Task\TaskHandlerInterface;
class ActivateAccountByHireDateTask implements TaskHandlerInterface
{
public function handle(array $params = []): void
{
// Ejecutar la lógica de negocio
}
}Ejemplo de tarea existente: src/Task/ActivateAccountByHireDateTask.php
2. Registrar la tarea
Se registra mediante la base de datos o comandos:
bash
php bin/console app:run-schedulerEjecución programada
Mecanismo de implementación de TaskScheduler:
- Lee la configuración de Task desde la base de datos
- Analiza las expresiones Cron
- Localiza el procesador mediante
TaskHandlerLocator - Ejecuta de forma asíncrona con Symfony Messenger (
RunTaskMessage+RunTaskMessageHandler) - Registra el resultado de la ejecución en
TaskLog
Arquitectura de mensajes
TaskScheduler → envía RunTaskMessage
↓
Messenger (Doctrine Transport)
↓
RunTaskMessageHandler → TaskHandlerInterface::handle()
↓
TaskLog registra el resultado de la ejecuciónInterfaz de administración
Entrada: App\Controller\Admin\TaskController
Plantilla: templates/admin/task/index.html.twig
- Consulta de la lista de tareas
- Consulta de los registros de ejecución
- Ejecución manual de tareas
Características
- Programación mediante expresiones Cron
- Ejecución asíncrona (cola de mensajes de Messenger)
- Seguimiento del estado de ejecución (TaskLog)
- Mecanismo de reintento ante fallos
- Interfaz de procesador extensible