Cosa sono le code
Nelle applicazioni web puoi avere operazioni che richiedono qualche secondo: invio email, ridimensionamento immagini, chiamate ad API esterne. Eseguirle sincronamente in una richiesta HTTP costringe l’utente ad aspettare. Con le code di Laravel esegui questi lavori in background in modo asincrono. La richiesta risponde subito e i worker si occupano del lavoro.Le code supportano più backend: database, Redis, Amazon SQS, ecc.
In sviluppo, con il driver
sync i job vengono eseguiti immediatamente senza coda.Configurazione delle code
config/queue.php
Impostazioni inconfig/queue.php. Cambia driver con QUEUE_CONNECTION.
.env
Preparazione del driver database
Serve una tabellajobs. In Laravel 11+ è già inclusa nella migration.
Altrimenti:
Preparazione del driver Redis
Aggiungi la connessione inconfig/database.php e installa il driver.
SQS Overflow Storage
Amazon SQS ha un limite sulla dimensione dei payload. Per job con payload grandi puoi salvare l’eccesso in un cache store e inviare solo un puntatore.enabledattivo: payload > 1MB salvati nel cache store.alwaysatrue: salva sempre nel cache store.delete_after_processing(defaulttrue): elimina i payload salvati al successo.flush_on_clearatrue:queue:clearesegueflushdello store di overflow. Usa uno store dedicato.
Creazione della classe job
make:job
app/Jobs/SendWelcomeEmail.php.
Struttura del job
ShouldQueue indica che va elaborato via coda. Il trait Queueable fornisce i metodi necessari.
Dispatch del job
dispatch()
Ritardato
dispatchAfterResponse()
Esegui subito dopo la risposta HTTP. Funziona anche consync.
Coda specifica
Queue Routing
Instrada per default certi job a una connessione/coda tramiteQueue::route() nel boot() di un ServiceProvider.
Il Queue Routing è sovrascrivibile a livello di job con
onQueue() / onConnection().Esecuzione sincrona (test/sviluppo)
Dispatch in bulk
Per molti job indipendenti senza tracciamento come nei batch:Bus::bulk() invia in modo efficiente ma senza le funzionalità di batch (progresso, callback).Elaborazione dei job
queue:work
Opzioni del worker
Impostazioni nella classe
Rilascio del job (middleware Release)
Per rimettere il job in coda al soddisfacimento di una condizione.Release::unless() rilascia quando la condizione è false.
Gestione dei job falliti
Tabella failed_jobs
Cleanup al fallimento
Interrompere il retry per certe eccezioni
InwithExceptions() di bootstrap/app.php:
Elenco job falliti
Retry
Eliminazione
Driver più usati
database
Semplice, senza middleware aggiuntivi. Salva sujobs e i worker fanno polling.
- Pro: setup semplice, riusa RDBMS
- Contro: carico DB, non adatto a grandi volumi
redis
Il più usato in produzione. In memoria, alta throughput.- Pro: veloce, scalabile
- Contro: richiede server Redis
Esercizio in produzione con Supervisor
In produzione serve un supervisor che riavviiqueue:work se cade.
numprocs=2 per due worker in parallelo.
Esempio pratico: invio email in coda
1
Crea il job
2
Implementa
3
Dispatch dal controller
4
Avvia il worker
Riepilogo
Quando usare le code
Quando usare le code
- Invio email/SMS
- Elaborazione immagini/video
- Chiamate ad API esterne
- Generazione report o export CSV
- Invio webhook
Suggerimenti in sviluppo
Suggerimenti in sviluppo
Con
QUEUE_CONNECTION=sync i job vengono eseguiti subito senza worker.Comandi comuni
Comandi comuni