Laravel - Configurer et créer des jobs (Gestion des files d'attente)
Florian JOURNEAU
02 January 2022
Catégorie :
Laravel
Gestion des jobs via la base de donnée
Création des migrations nécessaires, cela va créer une table nommé jobs :
php artisan queue:table
php artisan migrate
et modification du fichier .env :
QUEUE_CONNECTION=database
Créer un job
Considérons le code suivant pour envoyer un mail :
Mail::to($user->email)->send(new FjoTestMail());
Le but est de déporter cette action. Pour ce faire nous avons besoin de l'instance de
$user
.Commençons par créer le job :
php artisan make:job SendMailJob
On se retrouve avec un fichier créé dans
app ⦊ Jobs ⦊ SendMailJob.php
.Comme on aura besoin de l'instance de
$user
, il va falloir la passer au constructeur de notre job. Ensuite, c'est cette instance que l'on utilisera dans le handle de la classe Job, ce qui donne :
class SendMailJob implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
public User $user;
/**
* Create a new job instance.
*
* @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 FjoTestMail());
}
}
Pour que ce job soit dispatché dans la file d'attente, on remplacera l'ancien code d'envoie de mail par :
SendMailJob::dispatch($user);
Si la configuration dans le fichier .env à bien été effectuée, le mail ne sera pas envoyé, en revanche, il y aura à l'exécution du code ci-dessus une nouvelle entrée créée dans la table jobs.
Lancer les jobs en attente
Exécuter :
php artisan queue:work