Colas de tareas para PHP: RabbitMQ, Beanstalkd y Gearman

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

Colas de tareas para PHP: RabbitMQ, Beanstalkd y Gearman



En las aplicaciones web modernas, a menudo surge la necesidad de ejecutar operaciones largas o que consumen muchos recursos de forma asíncrona, sin obligar al usuario a esperar una respuesta. Ejemplos típicos: envío de correos electrónicos masivos, generación de informes, procesamiento de imágenes, interacción con APIs externas. Para resolver estas tareas en PHP se utilizan colas de tareas (job queues). Permiten separar la lógica de la solicitud del procesamiento en segundo plano, mejorando la capacidad de respuesta de la interfaz y la escalabilidad del sistema.



En este artículo, analizaremos en detalle tres herramientas populares para organizar colas en PHP: RabbitMQ, Beanstalkd y Gearman. Conocerás sus características, arquitectura, ejemplos de uso y aprenderás a elegir la solución adecuada para tu proyecto.



1. RabbitMQ



RabbitMQ es un potente broker de mensajes que implementa el protocolo AMQP (Advanced Message Queuing Protocol). Soporta escenarios complejos de enrutamiento, intercambiadores (exchanges), colas con prioridades, confirmaciones de entrega y mucho más. RabbitMQ es ideal para arquitecturas de microservicios y sistemas donde se requiere una entrega confiable de mensajes.



Instalación y conexión

Para trabajar con RabbitMQ en PHP se utiliza la librería php-amqplib. Instalación a través de Composer:

composer require php-amqplib/php-amqplib


Ejemplo: envío de notificación por correo electrónico

Crearemos un productor (remitente) y un consumidor (procesador) para el envío de correos en segundo plano.



Archivo producer.php:

<?phprequire_once 'vendor/autoload.php';

use PhpAmqpLib\\Connection\\AMQPStreamConnection;use PhpAmqpLib\\Message\\AMQPMessage;

$connection = new AMQPStreamConnection('localhost', 5672, 'guest', 'guest');$channel = $connection->channel();

$channel->queue_declare('email_queue', false, true, false, false);

$data = json_encode([ 'email' => 'user@example.com', 'subject' => '¡Bienvenido!', 'body' => 'Gracias por registrarte.']);

$msg = new AMQPMessage($data, [ 'delivery_mode' => AMQPMessage::DELIVERY_MODE_PERSISTENT]);

$channel->basic_publish($msg, '', 'email_queue');

echo " [x] Mensaje enviado";

$channel->close();$connection->close();


Archivo consumer.php:

<?phprequire_once 'vendor/autoload.php';

use PhpAmqpLib\\Connection\\AMQPStreamConnection;

$connection = new AMQPStreamConnection('localhost', 5672, 'guest', 'guest');$channel = $connection->channel();

$channel->queue_declare('email_queue', false, true, false, false);

echo " [*] Esperando mensajes. Para salir presione CTRL+C";

$callback = function ($msg) { $data = json_decode($msg->body, true); // Simulación de envío de email sleep(2); echo " [x] Correo enviado a {$data['email']}"; $msg->ack();};

$channel->basic_qos(null, 1, null);$channel->basic_consume('email_queue', '', false, false, false, false, $callback);

while ($channel->is_consuming()) { $channel->wait();}

$channel->close();$connection->close();


2. Beanstalkd



Beanstalkd es un gestor de colas ligero, rápido y fácil de usar. Funciona con un protocolo similar a memcached y es ideal para tareas que no requieren enrutamiento complejo. Beanstalkd admite prioridades, retrasos (delay) y time-to-run (TTR).



Instalación

Para PHP existe el cliente pda/pheanstalk:

composer require pda/pheanstalk


Ejemplo: procesamiento de imágenes

Supongamos que necesitamos crear miniaturas para las imágenes subidas.



Archivo producer.php:

<?phprequire_once 'v                    

Recommendations