Colas de tareas en PHP: guía completa para principiantes

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Introducción a las colas de tareas en PHP

\n\n

En 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\n

Una 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\n

Imagine 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\n

Principales 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
\n\n

Arquitectura de las colas de tareas en PHP

\n\n

Un 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
\n\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.

\n\n

Ejemplo práctico: creación de una cola de tareas en PHP puro

\n\n

Vamos 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.

\n\n

Paso 1: Preparación del entorno

\n
composer require predis/predis
\n\n

Paso 2: Creación del productor

\n

El productor agregará tareas a la cola. Creemos el archivo producer.php:

\n
<?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\n

Paso 3: Creación del worker

\n

El worker

Blogs

Book Recommendations