O que são filas de tarefas em PHP e para que servem?
No desenvolvimento web moderno, frequentemente surge a necessidade de executar operações que consomem muitos recursos ou são demoradas, que não devem bloquear o trabalho do usuário. Envio de campanhas de e-mail, geração de relatórios em PDF, processamento de imagens, sincronização com APIs externas — todas essas tarefas são melhor executadas de forma assíncrona, em segundo plano. É exatamente para isso que existem as filas de tarefas (job queues) em PHP.
Uma fila de tarefas é um mecanismo que permite colocar tarefas (jobs) em um armazenamento especial e processá-las sequencialmente ou em paralelo usando workers. O usuário recebe uma resposta instantânea, e o trabalho pesado é executado posteriormente, sem desacelerar a aplicação.
Principais vantagens do uso de filas
- Aumento de desempenho — o usuário não espera a conclusão de operações pesadas
- Escalabilidade — é possível executar vários workers para processamento paralelo
- Confiabilidade — se uma tarefa não for executada, ela retorna automaticamente para a fila
- Agendamento — é possível adiar a execução de uma tarefa para um horário específico
Ferramentas populares para trabalhar com filas em PHP
Existem várias soluções populares para implementar filas de tarefas em PHP. Vamos analisar as principais:
1. RabbitMQ
Poderoso broker de mensagens, que suporta vários protocolos. Para PHP, utiliza-se a biblioteca php-amqplib. RabbitMQ é ideal para cenários complexos de roteamento de mensagens.
2. Redis + PHP-Resque
Solução leve baseada em Redis. PHP-Resque é um port da popular biblioteca Ruby Resque. Excelente para projetos pequenos e médios.
3. Beanstalkd
Gerenciador de filas simples e rápido, especialmente desenvolvido para aplicações web. Funciona com o protocolo Memcached. A biblioteca pda/pheanstalk é o padrão para trabalhar com Beanstalkd em PHP.
4. Laravel Queues
Se você usa Laravel, o sistema de filas embutido é a melhor escolha. Ele suporta drivers para Redis, Beanstalkd, Amazon SQS e até mesmo banco de dados.
Exemplo prático: criando uma fila simples em PHP
Vamos criar uma fila de tarefas simples usando Beanstalkd e a biblioteca Pheanstalk. Esta é uma ótima opção para iniciantes, pois o Beanstalkd é muito fácil de configurar.
Instalação e configuração
Primeiro, instale o Beanstalkd no servidor:
# Ubuntu/Debiansudo apt-get install beanstalkd
# macOSbrew install beanstalkd
# Iniciar o servidorbeanstalkd -l 127.0.0.1 -p 11300 &Em seguida, instale a biblioteca Pheanstalk via Composer:
composer require pda/pheanstalkCriando uma tarefa (Job)
Vamos criar uma classe para envio de e-mail:
<?phpnamespace App\\Jobs;
class SendEmailJob{ private string $to; private string $subject; private string $body;
public function __construct(string $to, string $subject, string $body) { $this->to = $to; $this->subject = $subject; $this->body = $body; }
public function handle(): void { // Aqui a lógica real de envio de e-mail mail($this->to, $this->subject, $this->body); echo "E-mail enviado para {$this->to}"; }
public function toArray(): array { return [ 'to' => $this->to, 'subject' => $this->subject, 'body' => $this->body, ]; }
public static function fromArray(array $data): self { return new self($data['to'], $data['subject'], $data['body']); }}Adicionando uma tarefa à fila
Agora vamos escrever um script que coloca a