Nell’articolo precedente abbiamo introdotto il concetto di coda in generale. Adesso vediamo come creare una coda in Laravel, inserire e leggere i messaggi.

Queue provider

Il “queue provider” è il supporto in cui vengono scritti e letti i messaggi della coda. Laravel nativamente supporta i seguenti provider:

  • Amazon SQS – Servizio gestito di AWS. Esegue autoscaling automaticamente in base al traffico / numero di messaggi.
  • Redis In-memory key/value storage – Estremamente veloce e facile da configurare anche in locale.
  • Database – Qualsiasi database relazionale già configurato in Laravel. Questo richiede l’esecuzione di una migration per la creazione delle tabelle relative alle code
  • Beanstalkd – Un semplice protocollo di gestione delle code ispirato a Memached.

Ognuno di questi servizi ha differenti caratteristiche, quello che sceglierai dipende soltanto dalle tue necessità e dalla tua infrastruttura.

A prescindere dal servizio, il modo in cui la business logic è implementata è sempre lo stesso. Quale provider utilizzare viene comunque definito nel file di configurazione che trovi nel file config/queue.php.

Definizione di un job

Supponiamo di voler inviare una mail per confermare l’indirizzo email di un utente dopo la registrazione. Per questo scopo creiamo un “job”. Per comodità possiamo farlo con il comando artisan:

php artisan make:job EmailConfirmation

Questo comando creerà una classe EmailConfirmation che implementa l’interfaccia ShouldQueue, la quale indicherà al framework che la sua esecuzione dovrà essere effettuata in modo asincrono mediante l’uso di una coda.

La classe EmailConfirmation avrà un metodo handle() nel quale dovrai implementare la logica di invio email. Per farlo potrai passare al metodo handle o al costruttore della classe, le dipendenze di cui hai bisogno.

public function handle(User $user) {

// Logica di invio email all’utente

}

Creazione di un job

Seguendo l’esempio precedente possiamo immaginare che nel controller dove gestiamo la registrazione dell’utente vogliamo mettere in coda l’invio della mail di conferma. Per fare questo dovremo fare il “dispatch” del job che abbiamo creato in precedenza, magari passandogli come parametro l’utente a cui dobbiamo inviare la mail.

 EmailConfirmation::dispatch($user);

Come vedi, una volta definito il job e configurato il provider è molto semplice utilizzare le code con Laravel!

Conclusione 

Abbiamo visto come gestire le code in Laravel. Ti invitiamo comunque sempre a fare riferimento alla documentazione ufficiale Laravel.

Qui potrai trovare molte altre informazioni riguardo le code, come per esempio il throttling, l’invio programmato o l’invio condizionale ad esempio.

Verifica che la documentazione sia relativa alla tua versione di Laravel: il link riportato sopra si riferisce alla versione 8 di Laravel.

 

Dai un’occhiata a tutti i nostri Corsi PHP, JavaScript, Laravel e Vue.js!