Filas de tarefas para PHP: RabbitMQ, Beanstalkd e Gearman

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Filas de tarefas para PHP: RabbitMQ, Beanstalkd e Gearman



Em aplicações web modernas, surge frequentemente a necessidade de executar operações longas ou que consomem muitos recursos de forma assíncrona, sem fazer o usuário esperar pela resposta. Exemplos típicos: envio de campanhas de e-mail, geração de relatórios, processamento de imagens, interação com APIs externas. Para resolver esses problemas em PHP, são usadas filas de tarefas (job queues). Elas permitem separar a lógica da requisição do processamento em segundo plano, aumentando a capacidade de resposta da interface e a escalabilidade do sistema.



Neste artigo, vamos analisar detalhadamente três ferramentas populares para organizar filas em PHP: RabbitMQ, Beanstalkd e Gearman. Você conhecerá suas características, arquitetura, exemplos de uso e aprenderá a escolher a solução adequada para o seu projeto.



1. RabbitMQ



RabbitMQ é um poderoso broker de mensagens que implementa o protocolo AMQP (Advanced Message Queuing Protocol). Ele suporta cenários complexos de roteamento, exchanges, filas com prioridade, confirmações de entrega e muito mais. RabbitMQ é ideal para arquitetura de microsserviços e sistemas onde é necessária uma entrega confiável de mensagens.



Instalação e conexão

Para trabalhar com RabbitMQ em PHP, utiliza-se a biblioteca php-amqplib. Instalação via Composer:

composer require php-amqplib/php-amqplib


Exemplo: envio de notificação por e-mail

Vamos criar um produtor (remetente) e um consumidor (processador) para o envio de e-mails em segundo plano.



Arquivo 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' => 'Bem-vindo!', 'body' => 'Obrigado por se registrar.']);

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

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

echo " [x] Mensagem enviada";

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


Arquivo 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 " [*] Aguardando mensagens. Para sair, pressione CTRL+C";

$callback = function ($msg) { $data = json_decode($msg->body, true); // Simulação de envio de e-mail sleep(2); echo " [x] E-mail enviado para {$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 é um gerenciador de filas leve, rápido e fácil de usar. Ele funciona com um protocolo semelhante ao memcached e é ideal para tarefas que não exigem roteamento complexo. Beanstalkd suporta prioridades, atrasos (delay) e time-to-run (TTR).



Instalação

Para PHP, existe o cliente pda/pheanstalk:

composer require pda/pheanstalk


Exemplo: processamento de imagens

Suponha que precisamos criar miniaturas para imagens enviadas.



Arquivo producer.php:

<?phprequire_once 'v                    

Recommendations