Filas de Tarefas em PHP: Guia Prático Completo

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

Trabalhando com Filas de Tarefas em PHP: Guia Prático Completo

\n\n

Em aplicações web modernas, surge frequentemente a necessidade de executar operações longas ou que consomem muitos recursos, sem fazer o usuário esperar. Envio de campanhas de e-mail, geração de relatórios em PDF, processamento de imagens, raspagem de dados — todas essas tarefas são ideais para processamento assíncrono através de filas de tarefas. Neste artigo, vamos detalhar como organizar o trabalho com filas de tarefas em PHP na prática, explorar ferramentas populares e escrever código funcional.

\n\n

O que é uma fila de tarefas e por que ela é necessária?

\n\n

Uma fila de tarefas (job queue) é um mecanismo que permite colocar tarefas em uma fila e executá-las de forma assíncrona, fora do fluxo principal de processamento de uma requisição HTTP. Em vez de executar uma operação pesada de forma síncrona (por exemplo, enviar 1000 e-mails durante um registro), você simplesmente coloca a tarefa na fila e retorna imediatamente uma resposta ao usuário. Um worker em segundo plano (worker) pega as tarefas da fila e as executa uma após a outra.

\n\n

Principais vantagens do uso de filas:

\n
    \n
  • Aumento de desempenho — o usuário não espera a conclusão de operações pesadas
  • \n
  • Resiliência a falhas — se uma tarefa não for executada, ela retorna à fila para reprocessamento
  • \n
  • Escalabilidade — é possível executar qualquer número de workers para processamento paralelo
  • \n
  • Amortecimento de carga — a fila suaviza picos de carga no sistema
  • \n
\n\n

Ferramentas populares para trabalhar com filas em PHP

\n\n

1. RabbitMQ

\n

RabbitMQ é um poderoso broker de mensagens que suporta o protocolo AMQP. É ideal para cenários complexos de roteamento e requer a instalação de um servidor separado.

\n\n
// Instalação via Composer\ncomposer require php-amqplib/php-amqplib\n\n// Envio de tarefa para a fila\n<?php\nrequire_once 'vendor/autoload.php';\n\nuse PhpAmqpLib\\Connection\\AMQPStreamConnection;\nuse PhpAmqpLib\\Message\\AMQPMessage;\n\n$connection = new AMQPStreamConnection('localhost', 5672, 'guest', 'guest');\n$channel = $connection->channel();\n$channel->queue_declare('email_queue', false, true, false, false);\n\n$data = json_encode([\n    'to' => 'user@example.com',\n    'subject' => 'Olá!',\n    'body' => 'Mensagem de teste'\n]);\n\n$msg = new AMQPMessage($data, ['delivery_mode' => AMQPMessage::DELIVERY_MODE_PERSISTENT]);\n$channel->basic_publish($msg, '', 'email_queue');\n$channel->close();\n$connection->close();\n?>
\n\n

2. Redis + php-resque

\n

Redis é um armazenamento in-memory rápido, ideal para filas simples. php-resque é um port em PHP da popular biblioteca Ruby Resque.

\n\n
// Instalação\ncomposer require chrisboulton/php-resque\n\n// Criação da tarefa\n<?php\nclass SendEmailJob\n{\n    public function perform()\n    {\n        $args = $this->args;\n        // Lógica de envio de e-mail\n        mail($args['to'], $args['subject'], $args['body']);\n    }\n}\n\n// Adicionando à fila\nResque::setBackend('localhost:6379');\nResque::enqueue('default', 'SendEmailJob', [\n    'to' => 'user@example.com',\n    'subject' => 'Olá',\n    'body' => 'Teste'\n]);\n?>
\n\n

3. Beanstalkd

\n

Beanstalkd é um gerenciador de filas leve, rápido e confiável. É simples de instalar e configurar, tornando-o uma excelente escolha para projetos pequenos.

\n\n
// Instalação\ncomposer require pda/pheanstalk\n\n// Envio de tarefa\n<?php\nrequire_once 'vendor/autoload.php';\n\nuse Pheanstalk\\Pheanstalk;\n\n$pheanstalk = Pheanstalk::create('127.0.0.1:11300');\n$pheanstalk->useTube('email_tube')->put(\n    json_encode(['to' => 'user@example.com', 'subject' => 'Teste']),\n    Pheanstalk::DEFAULT_PRIORITY,\n    Pheanstalk::DEFAULT_DELAY,\n    60 // TTR (time to run)                

Blogs

Book Recommendations