Laravel - Configurer et créer des jobs (Gestion des files d'attente)

Florian Journeau
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