Colas de tareas para PHP: RabbitMQ, Gearman y Redis

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, Gearman y Redis



En las aplicaciones web modernas en PHP, a menudo surge la necesidad de ejecutar operaciones largas o que consumen muchos recursos sin bloquear el hilo principal del usuario. El envío de correos masivos, la generación de informes, el procesamiento de imágenes, el trabajo con video — todas estas tareas es mejor realizarlas de forma asíncrona, en segundo plano. Para esto existen las colas de tareas (job queues) — mecanismos que permiten posponer la ejecución de una tarea y procesarla más tarde mediante workers.



En este artículo, analizaremos tres herramientas populares para organizar colas de tareas en PHP: RabbitMQ, Gearman y Redis. Aprenderá en qué casos utilizarlas y verá ejemplos de código.



¿Para qué sirven las colas de tareas?



Las principales ventajas de usar colas:



  • Asincronía — el usuario no espera a que finalice una operación pesada.
  • Escalabilidad — puede ejecutar múltiples workers para el procesamiento en paralelo.
  • Tolerancia a fallos — si un worker falla, la tarea permanece en la cola y se procesará más tarde.
  • Separación de responsabilidades — el código que envía la tarea y el código que la procesa están débilmente acoplados.


1. RabbitMQ — potente broker de mensajes



RabbitMQ es un broker de mensajes completo que admite el protocolo AMQP. Proporciona entrega garantizada, enrutamiento, confirmaciones y mucho más. Es adecuado para sistemas complejos con alta carga.



Para trabajar con RabbitMQ en PHP se utiliza la extensión php-amqplib.



Instalación

composer require php-amqplib/php-amqplib


Ejemplo: envío de una tarea

<?phprequire_once __DIR__ . '/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' => '¡Hola!']);$msg = new AMQPMessage($data, ['delivery_mode' => AMQPMessage::DELIVERY_MODE_PERSISTENT]);

$channel->basic_publish($msg, '', 'email_queue');echo "Tarea enviada a la cola";

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


Ejemplo: worker (procesador)

<?phprequire_once __DIR__ . '/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);

$callback = function ($msg) { $data = json_decode($msg->body, true); echo "Enviando correo a {$data['email']} con asunto '{$data['subject']}'"; // Aquí el envío real de email $msg->ack(); // Confirmación de procesamiento};

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

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


2. Gearman — sistema distribuido de tareas



Gearman se especializa en el procesamiento distribuido de tareas. Permite invocar funciones en servidores remotos o en segundo plano. Es ideal para arquitecturas de microservicios.



Para PHP existe la extensión gearman (PECL).



Instalación

sudo apt install gearman-job-serverpecl install gearman


Ejemplo: cliente (envío de tarea)

<?php$client = new GearmanClient();$client->addServer('127.0.0.1', 4730);

$result = $client->doBackground('send_email', json_encode([ 'email' => 'user@example.com', 'subject' => '¡Hola!']));

echo "Tarea enviada

Recommendations