Filas de Tarefas para PHP: RabbitMQ, Gearman e Redis

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



Em aplicações web modernas em PHP, surge frequentemente a necessidade de executar operações longas ou que consomem muitos recursos sem bloquear o fluxo principal do usuário. Envio de campanhas de e-mail, geração de relatórios, processamento de imagens, trabalho com vídeo — todas essas tarefas são melhor executadas de forma assíncrona, em segundo plano. Para isso, existem as filas de tarefas (job queues) — mecanismos que permitem adiar a execução de uma tarefa e processá-la posteriormente com a ajuda de workers.



Neste artigo, vamos analisar três ferramentas populares para organizar filas de tarefas em PHP: RabbitMQ, Gearman e Redis. Você aprenderá em quais casos usá-las e verá exemplos de código.



Para que servem as filas de tarefas?



Principais vantagens do uso de filas:



  • Assincronia — o usuário não espera a conclusão de uma operação pesada.
  • Escalabilidade — você pode executar vários workers para processamento paralelo.
  • Tolerância a falhas — se um worker falhar, a tarefa permanece na fila e será processada posteriormente.
  • Separação de responsabilidades — o código de envio da tarefa e o código de processamento são fracamente acoplados.


1. RabbitMQ — poderoso broker de mensagens



RabbitMQ é um broker de mensagens completo, que suporta o protocolo AMQP. Ele oferece entrega garantida, roteamento, confirmações e muito mais. Adequado para sistemas complexos com alta carga.



Para trabalhar com RabbitMQ em PHP, utiliza-se a extensão php-amqplib.



Instalação

composer require php-amqplib/php-amqplib


Exemplo: envio de tarefa

<?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' => 'Olá!']);$msg = new AMQPMessage($data, ['delivery_mode' => AMQPMessage::DELIVERY_MODE_PERSISTENT]);

$channel->basic_publish($msg, '', 'email_queue');echo "Tarefa enviada para a fila";

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


Exemplo: worker (processador)

<?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 e-mail para {$data['email']} com assunto '{$data['subject']}'"; // Aqui o envio real do e-mail $msg->ack(); // Confirmação de processamento};

$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 distribuído de tarefas



Gearman é especializado no processamento distribuído de tarefas. Ele permite chamar funções em servidores remotos ou em segundo plano. É ideal para arquitetura de microsserviços.



Para PHP, existe a extensão gearman (PECL).



Instalação

sudo apt install gearman-job-serverpecl install gearman


Exemplo: cliente (envio de tarefa)

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

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

echo "Tarefa enviada

Recommendations