Skip to content

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          # Programador

Las entidades relacionadas están en src/Entity/System/:

EntidadDescripción
Task.phpDefinición de tarea (Cron, procesador, parámetros)
TaskLog.phpRegistro 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-scheduler

Ejecució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ón

Interfaz 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

Código abierto bajo MIT | Copyright © 2026 Doggy