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.
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.

Laravel Queues: Como Melhorar a Performance do Seu Aplicativo

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! 🚀

Leave a Comment

Comments

No comments yet. Why don’t you start the discussion?

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *