Laravel Queues

Laravel
Tempo de leitura: 4 minutos

O Laravel Queues é um sistema robusto e flexível que gerencia a execução de tarefas demoradas (Jobs) em segundo plano (assincronamente). Isso é essencial para manter a responsividade da aplicação, pois remove tarefas como envio de e-mails em massa, processamento de imagens e geração de relatórios do fluxo principal da requisição HTTP. O resultado é um tempo de resposta mais rápido e melhor escalabilidade.

1. 🏗️ Arquitetura e Criação de Jobs

O sistema de filas funciona no modelo Produtor-Consumidor: sua aplicação (Produtor) adiciona Jobs à fila, e um processo separado (Worker ou Consumidor) executa esses Jobs.

A. Criando a Classe do Job

Um Job é uma classe que implementa a interface ShouldQueue e encapsula a lógica da tarefa.

Bash

php artisan make:job ProcessOrder
# Gera App/Jobs/ProcessOrder.php

B. Implementação do Job

A lógica de execução da tarefa é definida no método handle(). As propriedades públicas (como $order) são passadas no construtor e serializadas/desserializadas pela fila.

PHP

// App/Jobs/ProcessOrder.php
// ... imports

class ProcessOrder implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

    public $order;

    public function __construct(Order $order) // Recebe o modelo Eloquent
    {
        $this->order = $order;
    }

    public function handle()
    {
        // Lógica de processamento assíncrono (ex: notificar inventário, enviar e-mail)
        \Mail::to($this->order->user->email)->send(new OrderConfirmation($this->order));
    }
}

2. 📤 Dispatch e Execução

A. Disparando Jobs (Dispatch)

Use o método estático dispatch() no Job para enviá-lo para a fila configurada (geralmente Redis ou Database).

PHP

$order = Order::findOrFail(1);

// O Job é empurrado para a fila e a execução continua imediatamente.
\App\Jobs\ProcessOrder::dispatch($order); 

B. O Processo Worker

Para que o Job seja processado, um Worker precisa estar ativo, ouvindo a fila.

Bash

# Inicia um Worker que irá processar continuamente os Jobs
php artisan queue:work 

# Para produção, use o modo daemon (melhor performance)
php artisan queue:work --daemon

Nota: Em ambientes de produção, você deve usar um monitor de processos (como Supervisor) para manter o Worker rodando de forma contínua e reiniciá-lo em caso de falha.

3. ⏱️ Opções de Tempo e Prioridade

A. Adiando Jobs (delay)

Você pode agendar a execução do Job para um momento futuro:

PHP

// O Job será executado 5 minutos após o envio.
\App\Jobs\SendReminderEmail::dispatch($user)
    ->delay(now()->addMinutes(5));

B. Filas Específicas (onQueue)

É comum ter diferentes filas para Jobs com prioridades ou requisitos de recursos distintos.

PHP

// Envia o Job para a fila 'high' (alta prioridade)
\App\Jobs\ProcessOrder::dispatch($order)->onQueue('high'); 

O Worker deve ser instruído a processar essa fila específica:

Bash

php artisan queue:work --queue=high,default

4. 🔗 Job Middleware e Encadeamento

A. Job Middleware

Semelhante ao middleware HTTP, o Job Middleware permite executar código antes e depois da execução do Job. Útil para limites de taxa (rate limiting) ou logging customizado.

Bash

php artisan make:middleware LogJobExecution

Aplicando o Middleware no Job:

PHP

class ProcessOrder extends Job implements ShouldQueue
{
    // ...
    public function middleware(): array
    {
        return [new LogJobExecution];
    }
}

B. Encadeamento de Jobs (chain)

Você pode encadear vários Jobs para que sejam executados sequencialmente.

PHP

// O LogJob::class só será executado se o ProcessOrder::class for bem-sucedido.
\App\Jobs\ProcessOrder::withChain([
    new \App\Jobs\NotifyAdminJob(),
    new \App\Jobs\CleanUpFilesJob(),
])->dispatch($order);

5. 💔 Jobs Falhados e Manutenção

O Laravel registra Jobs que falharam após atingir o número máximo de tentativas (--tries).

ComandoFunção
php artisan queue:failedLista todos os Jobs que falharam e foram registrados.
php artisan queue:retry <ID>Tenta executar novamente um Job falhado específico.
php artisan queue:retry allTenta executar novamente todos os Jobs falhados.
php artisan queue:forget <ID>Remove um Job falhado da tabela de falhas.
php artisan queue:flushLimpa todos os Jobs da fila (cuidado: não recupera o trabalho).

✅ Conclusão Laravel Queues

Laravel Queues: É o coração da escalabilidade em aplicações Laravel. Ao utilizar o sistema de Jobs e Workers, você move o trabalho de longa duração para o segundo plano, garantindo que a aplicação permaneça rápida e responsiva para o usuário final, e fornece ferramentas robustas para manutenção e recuperação de falhas.

Mas antes de dominar o Laravel, se for o seu caso, toda jornada tem um início. Vamos entender quais são os conhecimentos básicos necessários para aproveitar ao máximo este poderoso framework. Para iniciar seus estudos no Laravel, você precisará dominar as seguintes tecnologias:

HTML
HTML
CSS
CSS
Javascript
JavaScript
SQL
SQL
Capa Curso PHP
PHP

E se você gosta do nosso conteúdo, não deixe de contribuir adquirindo os serviços e produtos dos nossos apoiadores e empresas que somos associados:

Hospedagem Hostinger
Ofertas Amazon
Amazon Prime

Author: Thiago Rossi
Com mais de 20 anos de experiência em tecnologia, atuo como Engenheiro de Computação, desenvolvedor de sistemas, escritor e produtor de conteúdo. Minha trajetória passa pelo ensino técnico, desenvolvimento web, arquitetura de sistemas e criação de soluções voltadas para a indústria de jogos digitais. Acredito que conhecimento deve ser acessível e aplicável. Essa visão resultou em uma biblioteca com mais de 550 artigos gratuitos, abrangendo temas como desenvolvimento web, infraestrutura, inteligência artificial, Game Design, mercado de jogos e carreiras na indústria de games. Sou autor do livro "GDD – O Guia Definitivo", uma obra dedicada ao planejamento e documentação de jogos digitais, e criador do GameMeTRix, uma plataforma que auxilia desenvolvedores na análise e validação de ideias para jogos. Meu trabalho busca conectar planejamento, tecnologia e mercado para ajudar criadores a transformar boas ideias em projetos viáveis. Atualmente concentro meus estudos e projetos no desenvolvimento de jogos web, na criação de metodologias para validação de produtos digitais e na produção de conteúdo técnico voltado ao ecossistema de jogos. Meu compromisso é unir teoria, prática e experiência de mercado para contribuir com o crescimento de novos desenvolvedores e profissionais da área.