Introducción a las colas de tareas en PHP
\n\nEn el desarrollo web moderno, a menudo surgen situaciones en las que es necesario realizar operaciones largas o que consumen muchos recursos sin obligar al usuario a esperar. Por ejemplo: envío de correos masivos, generación de informes PDF, procesamiento de imágenes o integración con API externas. Aquí es donde entran en juego las colas de tareas (job queues), una de las herramientas clave del desarrollador backend.
\n\nUna cola de tareas es un mecanismo que permite posponer la ejecución de una operación que consume muchos recursos en segundo plano, liberando el hilo principal de la aplicación para procesar nuevas solicitudes. En este artículo, analizaremos en detalle cómo trabajar con colas de tareas en PHP, desde los conceptos básicos hasta ejemplos prácticos.
\n\n¿Qué es una cola de tareas y para qué sirve?
\n\nImagine que su sitio web debe enviar 1000 correos después del registro de un usuario. Si lo hace de forma síncrona, la página tardará varios minutos en cargarse. El usuario se irá y el servidor estará bloqueado. La cola resuelve este problema: la tarea de envío de correos se coloca en una cola y un worker en segundo plano la procesa, mientras que el usuario recibe una respuesta instantánea.
\n\nPrincipales ventajas de usar colas
\n- \n
- Mejora de la UX — el usuario no espera la finalización de operaciones largas \n
- Aumento del rendimiento — el servidor procesa las solicitudes más rápido \n
- Escalabilidad — se pueden agregar workers adicionales para procesar la cola \n
- Tolerancia a fallos — en caso de error, las tareas se pueden volver a poner en la cola \n
- Programación — ejecución de tareas en un momento específico \n
Arquitectura de las colas de tareas en PHP
\n\nUn sistema de colas típico consta de tres componentes:
\n- \n
- Productor (Producer) — la parte del código que agrega tareas a la cola \n
- Cola (Queue) — el almacenamiento de tareas (a menudo basado en Redis, Beanstalkd o una base de datos) \n
- Worker — un script que escucha constantemente la cola y ejecuta las tareas \n
En PHP, para trabajar con colas se utilizan con mayor frecuencia las bibliotecas php-resque, Laravel Queue (si trabaja con Laravel) o enqueue/fs. Veremos un enfoque general que se puede adaptar a cualquier framework.
Ejemplo práctico: creación de una cola de tareas en PHP puro
\n\nVamos a crear un sistema de colas simple usando Redis. Instale Redis y la extensión phpredis o use predis/predis a través de Composer.
Paso 1: Preparación del entorno
\ncomposer require predis/predis\n\nPaso 2: Creación del productor
\nEl productor agregará tareas a la cola. Creemos el archivo producer.php:
<?php\nrequire 'vendor/autoload.php';\n\nuse Predis\\Client as RedisClient;\n\nclass JobProducer {\n private $redis;\n \n public function __construct() {\n $this->redis = new RedisClient([\n 'scheme' => 'tcp',\n 'host' => '127.0.0.1',\n 'port' => 6379,\n ]);\n }\n \n public function addJob(string $queueName, array $jobData): void {\n $job = json_encode([\n 'id' => uniqid(),\n 'data' => $jobData,\n 'created_at' => time()\n ]);\n \n // Usamos RPUSH para agregar al final de la cola\n $this->redis->rpush("queue:{$queueName}", $job);\n echo "Tarea agregada a la cola {$queueName}\\n";\n }\n}\n\n// Ejemplo de uso\n$producer = new JobProducer();\n$producer->addJob('emails', [\n 'to' => 'user@example.com',\n 'subject' => '¡Bienvenido!',\n 'body' => 'Gracias por registrarte...'\n]);\n?>\n\nPaso 3: Creación del worker
\nEl worker