O Laravel oferece um poderoso sistema de filas (Queues) para lidar com tarefas assíncronas, otimizando a performance da sua aplicação. Se o seu sistema executa envios de e-mail, geração de relatórios, processamento de imagens ou integrações externas, o uso de Laravel Queues pode reduzir o tempo de resposta e melhorar a experiência do usuário.
Neste guia completo, vamos explorar como configurar filas no Laravel, integrando o backend (Laravel) com o frontend (Blade) para acompanhar o processamento de tarefas em tempo real.
O que são Queues no Laravel?
As filas no Laravel permitem que tarefas demoradas sejam executadas em segundo plano. Em vez de sobrecarregar a aplicação, essas tarefas são colocadas em uma fila e processadas posteriormente por um worker.
Exemplo de uso:
• Enviar e-mails sem travar a interface do usuário
• Processar uploads e compressão de imagens
• Executar notificações e webhooks
• Integrar APIs externas sem lentidão
Passo 1: Configurando Laravel Queues
Por padrão, o Laravel usa o driver sync (processamento síncrono), mas podemos configurar diferentes opções, como:
• database (salva as filas no banco de dados)
• redis (opção rápida e eficiente)
• sqs (Amazon Simple Queue Service)
Primeiro, configure o driver no arquivo .env:
QUEUE_CONNECTION=database
Agora, crie as tabelas necessárias para armazenar as filas:
php artisan queue:table
php artisan migrate
Isso criará a tabela jobs, onde as tarefas enfileiradas serão armazenadas.
Passo 2: Criando um Job no Laravel
Os Jobs são classes que contêm as tarefas que serão executadas de forma assíncrona. Vamos criar um Job para enviar um e-mail:
php artisan make:job SendWelcomeEmail
Isso gerará um arquivo em app/Jobs/SendWelcomeEmail.php. Agora, edite o arquivo e adicione a lógica de envio de e-mail:
namespace App\Jobs;
use App\Models\User;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldBeUnique;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use Mail;
class SendWelcomeEmail implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
protected $user;
public function __construct(User $user)
{
$this->user = $user;
}
public function handle()
{
Mail::to($this->user->email)->send(new \App\Mail\WelcomeEmail($this->user));
}
}
O Laravel automaticamente enfileirará essa tarefa, processando-a separadamente.
Passo 3: Disparando Jobs da Aplicação
Agora, sempre que um novo usuário se registrar, enviaremos o e-mail de forma assíncrona. No UserController, dispare o job ao criar um novo usuário:
use App\Jobs\SendWelcomeEmail;
use App\Models\User;
public function register(Request $request)
{
$user = User::create($request->all());
SendWelcomeEmail::dispatch($user);
return redirect()->route('dashboard')->with('success', 'Cadastro realizado! O e-mail de boas-vindas será enviado em breve.');
}
Isso garante que o e-mail será enviado em segundo plano, sem impactar a experiência do usuário.
Passo 4: Rodando o Worker do Laravel
Para processar as filas, precisamos rodar o worker, que consumirá os jobs enfileirados:
php artisan queue:work
Esse comando deve estar sempre rodando em produção. Para manter o processo ativo, utilize supervisor no Linux.
Passo 5: Criando um Dashboard em Blade para Monitorar as Filas
Agora, vamos criar uma interface em Blade para visualizar o status das filas.
Crie a rota para o painel de monitoramento em routes/web.php:
use Illuminate\Support\Facades\DB;
Route::get('/queue-monitor', function () {
$jobs = DB::table('jobs')->get();
return view('queue-monitor', compact('jobs'));
});
Agora, crie a view Blade em resources/views/queue-monitor.blade.php:
@extends('layouts.app')
@section('content')
<div class="container">
<h2>Monitoramento de Filas</h2>
<table class="table">
<thead>
<tr>
<th>ID</th>
<th>Job</th>
<th>Data de Criação</th>
</tr>
</thead>
<tbody>
@foreach($jobs as $job)
<tr>
<td>{{ $job->id }}</td>
<td>{{ json_decode($job->payload)->displayName }}</td>
<td>{{ $job->created_at }}</td>
</tr>
@endforeach
</tbody>
</table>
</div>
@endsection
Agora, podemos acessar /queue-monitor para visualizar os jobs pendentes!
Passo 6: Testando as Queues no Laravel
Podemos testar o funcionamento das filas manualmente. Tente criar um usuário na aplicação e depois cheque as filas:
php artisan queue:work
Você verá os jobs sendo processados em tempo real.
Caso queira enfileirar um job manualmente para teste:
php artisan queue:table
php artisan migrate
php artisan queue:work
Conclusão
O uso de Laravel Queues melhora a performance do seu sistema, permitindo que tarefas demoradas sejam executadas em segundo plano. Com a configuração de Jobs, Workers e um painel de monitoramento em Blade, conseguimos um fluxo eficiente para processar tarefas assíncronas sem impactar o usuário final.
Resumo do que aprendemos:
✅ Configurar Laravel Queues com o banco de dados
✅ Criar e processar Jobs para tarefas assíncronas
✅ Executar o Worker para processar filas automaticamente
✅ Criar um dashboard em Blade para monitorar jobs enfileirados
Se este conteúdo foi útil, compartilhe e continue explorando Laravel para otimizar suas aplicações! 🚀