Vai al contenuto

Accodare una closure in Laravel: esempio e scelta rispetto a un Job

Laravel permette di passare una closure a dispatch per eseguire un piccolo lavoro tramite il sistema di code. Non serve creare una classe Job per ogni operazione, anche se una classe dedicata diventa utile quando crescono logica e requisiti di gestione.

Un esempio essenziale

In un’applicazione Laravel 12, questo codice scrive un valore dimostrativo nella cache. Va inserito in un file dell’applicazione; presuppone una cache configurata e una connessione di coda asincrona disponibile.

use Illuminate\Support\Facades\Cache;

$key = 'queue-demo:status';

dispatch(function () use ($key) {
    Cache::put($key, 'completed', 300);
});

Il valore può essere letto dal processo web soltanto se entrambi usano una cache condivisa appropriata. Una cache in memoria del singolo processo non dimostra la comunicazione tra richiesta e worker.

Dispatch non significa sempre esecuzione in background

Con la connessione sync, il lavoro viene eseguito nel processo corrente. Per usare una coda asincrona servono il relativo backend e un worker che la consumi. Una coda piena con worker fermi non completa il lavoro.

La documentazione delle closure accodate descrive serializzazione e firma del codice. La firma tutela l’integrità; non va interpretata come una garanzia che il payload sia cifrato e illeggibile.

Catturare solo il contesto necessario

Eviterei di trasferire nella closure l’intera richiesta, connessioni aperte o oggetti pesanti. Meglio riferimenti stabili e dati essenziali, da verificare quando il worker esegue il lavoro.

Tra invio ed esecuzione, la risorsa può cambiare o essere eliminata. In un sistema multi-tenant, anche il contesto del cliente va ricostruito e validato: non può dipendere dalla richiesta HTTP ormai terminata.

Quando passare a una classe Job

Sceglierei una classe dedicata per logica riusata, dipendenze articolate, middleware o politiche specifiche di retry. Il nome del Job rende inoltre più riconoscibile il lavoro nei log e nelle revisioni.

In entrambi i casi, considera l’eventualità di una nuova esecuzione. Inviare denaro o pubblicare un contenuto richiede protezioni dagli effetti duplicati; la sintassi breve della closure non cambia questa responsabilità.

Tag: