Pular para conteúdo

Aula 14 - Filas, Eventos e Jobs ⚡

🎯 Objetivo da Aula

Aprender a tornar sua aplicação muito mais rápida movendo tarefas pesadas para o "background". Vamos explorar Jobs, Queues (filas) e o sistema de Eventos/Listeners para criar uma arquitetura desacoplada.


🕰️ O Problema das Tarefas Lentas

Imagine que o usuário se cadastra e você precisa enviar um e-mail de boas-vindas. Se o servidor de e-mail demorar 5 segundos, o usuário ficará esperando com a tela travada. Solução: Colocar o envio de e-mail em uma fila e responder ao usuário imediatamente.


📊 Processamento Assíncrono com Filas

sequenceDiagram
    participant U as Usuário
    participant C as Controller
    participant Q as Fila (Redis/Banco)
    participant W as Worker (Background)
    U->>C: Clica em "Comprar"
    C->>Q: Adiciona Job "Gerar PDF"
    C-->>U: "Sua compra está sendo processada!"
    Note over Q,W: O Worker pega o job da fila
    W->>W: Gera o PDF pesado
    W->>U: Envia e-mail com o PDF

⚒️ Criando um Job

# Gerando a classe do Job
$ php artisan make:job ProcessarRelatorio

# Iniciando o processamento da fila
$ php artisan queue:work

Como despachar o job: ProcessarRelatorio::dispatch($dados);


🔔 Eventos e Listeners

Eventos permitem que partes diferentes do sistema "ouçam" quando algo importante acontece. - Evento: PedidoRealizado. - Listeners: EnviarEmailCliente, BaixarEstoque, NotificarLogistica.

Desacoplamento

O Controller de Pedidos não precisa saber como o estoque é baixado. Ele apenas dispara o evento.


🧠 Blocos de Destaque

Cache com Redis

Para aplicações de alta performance, use o Redis como driver de fila e cache. Ele é extremamente rápido porque armazena os dados na memória RAM.


🛠️ Exercícios Progressivos

  1. Básico: Configure o driver de fila para database no seu .env e rode a migration queue:batches-table.
  2. Intermediário: Crie um Job que apenas escreva uma mensagem no log (Log::info) e despache-o através de uma rota.
  3. Desafio: Implemente um Evento que seja disparado sempre que um produto for criado, enviando um e-mail fictício para o administrador.

🚀 Mini-Projeto da Aula

Relatório por E-mail: Crie um botão "Gerar Relatório de Vendas". Ao clicar, o sistema deve despachar um Job que simule um processamento pesado (sleep de 10 segundos) e, ao terminar, registre no log que o relatório está pronto. O usuário deve receber uma mensagem instantânea dizendo: "Seu relatório está sendo gerado e será enviado em breve".


Próxima Aula: Docker e Deploy