Em Laravel, as filas são uma ferramenta poderosa para processar tarefas em segundo plano de forma assíncrona, permitindo que a aplicação continue respondendo às solicitações do usuário, mantendo as tarefas mais demoradas executadas sem travar outras tarefas mais simples. As filas são úteis para lidar com tarefas que não precisam ser processadas imediatamente, como envio de e-mails, geração de relatórios, processamento de imagens, entre outras.
Para trabalhar com filas em Laravel, o framework fornece integração com drivers populares de filas, como Redis, Database, Amazon SQS, etc.
Aqui estão os passos para utilizar filas em Laravel com um exemplo prático de envio de e-mails em segundo plano:
Passo 1: Configuração do Driver de Fila
Antes de começar, certifique-se de que o driver de fila esteja configurado corretamente em seu arquivo .env. Por padrão, o Laravel usa o driver sync, que executa as filas em sincronia no mesmo processo da aplicação, útil para ambientes de desenvolvimento. Para produção, é recomendado usar um driver como Redis ou Database.
Exemplo no .env com Redis:
QUEUE_CONNECTION=redis
Passo 2: Crie uma Classe de Tarefa (Job)
A primeira coisa que precisamos fazer é criar uma classe que represente a tarefa que desejamos executar em segundo plano. Essa classe é chamada de "Job" em Laravel. Crie uma classe WelcomeEmail que será responsável por enviar um e-mail de boas-vindas:
php artisan make:job WelcomeEmail
Isso criará uma nova classe no diretório App/Jobs chamada WelcomeEmail.
Passo 3: Defina a Lógica da Tarefa
Edite a classe WelcomeEmail para definir a lógica da tarefa que queremos executar em segundo plano. No nosso exemplo, enviaremos um e-mail de boas-vindas para o usuário.
// app/Jobs/WelcomeEmail.php
namespace App\\\\Jobs;
use Illuminate\\\\Bus\\\\Queueable;
use Illuminate\\\\Contracts\\\\Queue\\\\ShouldQueue;
use Illuminate\\\\Foundation\\\\Bus\\\\Dispatchable;
use Illuminate\\\\Queue\\\\InteractsWithQueue;
use Illuminate\\\\Queue\\\\SerializesModels;
use Illuminate\\\\Support\\\\Facades\\\\Mail;
use App\\\\Mail\\\\WelcomeEmail as WelcomeEmailMail;
class WelcomeEmail implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
protected $user;
/**
* Create a new job instance.
*
* @param User $user
* @return void
*/
public function __construct(User $user)
{
$this->user = $user;
}
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
Mail::to($this->user->email)->send(new WelcomeEmailMail($this->user));
}
}
Passo 4: Disparando a Tarefa para a Fila
Agora, em qualquer lugar de sua aplicação onde deseja enviar o e-mail de boas-vindas, basta despachar a tarefa para a fila usando o método dispatch:
use App\\\\Jobs\\\\WelcomeEmail;
public function sendWelcomeEmail(User $user)
{
// Disparar a tarefa para a fila
WelcomeEmail::dispatch($user);
}
Passo 5: Processar a Fila Para que as tarefas sejam processadas, você precisa iniciar um processo de trabalhador (worker) em segundo plano. O Laravel possui um comando dedicado para executar os trabalhadores da fila:
php artisan queue:work
Isso iniciará um trabalhador que estará ouvindo a fila e processando as tarefas conforme elas chegam. Você pode executar vários trabalhadores simultaneamente para aumentar a capacidade de processamento.
Com o trabalhador em execução, sempre que você chamar o método dispatch para a tarefa, ela será adicionada à fila e processada pelo trabalhador.
As filas são uma maneira poderosa de tornar as tarefas demoradas em segundo plano e não afetar a responsividade da sua aplicação. Com essa abordagem, você pode escalar sua aplicação facilmente e fornecer uma experiência de usuário melhor.