Maison >cadre php >Laravel >Exemples pour expliquer l'utilisation simple des files d'attente Laravel

Exemples pour expliquer l'utilisation simple des files d'attente Laravel

WBOY
WBOYavant
2022-02-25 18:01:452750parcourir

Cet article vous apporte les connaissances pertinentes sur laravel Il présente principalement les files d'attente Laravel, dans quelles circonstances utiliser les files d'attente, configurer le stockage des files d'attente et d'autres problèmes connexes. J'espère qu'il sera utile à tout le monde.

Exemples pour expliquer l'utilisation simple des files d'attente Laravel

【Recommandation associée : Tutoriel d'apprentissage de Laravel

Cet article présentera comment utiliser les files d'attente dans Laravel et comprendra pourquoi les files d'attente sont utilisées

Quand utiliser les files d'attente ?

Prend du temps, comme télécharger un fichier puis effectuer certaines conversions de format, etc.

Si vous devez assurer le débit de livraison, comme l'envoi d'un message texte, parce que vous devez appeler l'API de quelqu'un d'autre, il y a toujours un risque d'échec, donc afin d'assurer la livraison, il est essentiel de réessayer.

Enregistrez le processus d'utilisation :

1. Configurez le stockage de la file d'attente

Le fichier de configuration de la file d'attente est stocké dans config/queue.php. La valeur par défaut est le traitement de synchronisation. Vous pouvez choisir ici la méthode d'utilisation. est la suivante.

Base de données

Créez une tâche de stockage de table de données et exécutez la migration des données après avoir exécuté la commande artisanale

php artisan queue:table
php artisan migrate

Redis

Pour utiliser le pilote de file d'attente Redis, vous devez configurer la connexion à la base de données Redis dans votre fichier de configuration config/ base de données.php.

Si votre connexion à la file d'attente Redis utilise le cluster Redis, le nom de votre file d'attente doit contenir la balise de hachage de clé. Ceci permet de garantir que toutes les clés Redis d'une file d'attente donnée sont placées dans le même hachage :

'redis' => [
'driver' => 'redis',
'connection' => 'default',
'queue' => 'default',
'retry_after' => 90,
],

2. Créez la classe de tâches

La classe de tâches de la file d'attente est dans le répertoire app/Jobs/

php artisan make : job SaveBusLine

Modifiez le fichier comme suit :

namespace App\Jobs;
use App\Http\Repository\BusRepository;
use Illuminate\Bus\Queueable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
class SaveBusLine implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
/**
* 任务最大尝试次数。
*
* @var int
*/
public $tries = 3;
/**
* 任务运行的超时时间。
*
* @var int
*/
public $timeout = 60;
private $datum;
/**
* Create a new job instance.
* @param array|object $datum
*
* @return void
*/
public function __construct($datum)
{
$this->datum = $datum;
}
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
BusRepository::getInstent()->updateBusLine($this->datum);
}
}

Appelez la méthode de file d'attente dans le contrôleur ou l'entrepôt :

use App\Jobs\SaveBusLine;
use Carbon\Carbon;
/***************** 队列操作 start *******************/
SaveBusLine::dispatch($arrayData)->delay(Carbon::now()->addMinute(1));
/***************** 队列操作 end *******************/

3. Démarrez la tâche de file d'attente

php artisan queue:work

4.

Superviseur Il s'agit d'un logiciel de surveillance des processus sur le système d'exploitation Linux qui redémarre automatiquement les commandes queue:listen ou queue:work après leur échec. Pour installer Supervisor sur Ubuntu, vous pouvez utiliser la commande suivante :

sudo apt-get install supervisor

{tip} Si la configuration manuelle de Supervisor semble un peu écrasante, vous pouvez envisager d'utiliser Laravel Forge, qui peut installer et configurer automatiquement Supervisor pour votre projet Laravel.

Configuration du superviseur

Les fichiers de configuration du superviseur sont généralement placés dans le répertoire /etc/supervisor/conf.d. Dans ce répertoire, vous pouvez créer n'importe quel nombre de fichiers de configuration pour indiquer au superviseur comment surveiller vos processus. Par exemple, nous créons un laravel-worker.conf pour démarrer et surveiller un processus queue:work :

[program:laravel-worker]
process_name=%(program_name)s_%(process_num)02d
command=php ~/laravel/artisan queue:work redis --sleep=3 --tries=3
autostart=true
autorestart=true
user=lisgroup
numprocs=8
redirect_stderr=true
stdout_logfile=/home/lisgroup/logs/worker.log

La commande numprocs dans cet exemple demandera au superviseur d'exécuter et de surveiller 8 processus queue:work, et de les redémarrer après leur échec. . Bien entendu, vous devez modifier la commande queue:work redis command pour afficher le pilote de file d'attente de votre choix. Vous devez également modifier l'utilisateur d'exécution user = Pour l'utiliser, veuillez vous référer à la documentation officielle du superviseur.

5. Gérer les tâches ayant échoué

Parfois, les tâches de votre file d'attente échoueront. Ne vous inquiétez pas, les choses ne se passeront pas toujours sans heurts. Laravel dispose d'un moyen pratique intégré pour spécifier le nombre maximum de fois qu'une tâche sera réessayée. Lorsqu'une tâche dépasse ce nombre de tentatives, elle sera insérée dans la table de données failed_jobs. Pour créer un fichier de migration pour la table failed_jobs, vous pouvez utiliser la commande queue:failed-table, puis utiliser la commande migrate Artisan pour générer la table failed_jobs :

sudo supervisorctl reread
sudo supervisorctl update
sudo supervisorctl start laravel-worker:*
Ensuite, exécutez le processeur de file d'attente, et lors de l'appel du file d'attente, vous devez transmettre le paramètre --tries lors de la commande Spécifie le nombre maximum de tentatives pour la tâche. Si elle n'est pas spécifiée, la tâche sera réessayée de manière permanente :
php artisan queue:failed-table
php artisan migrate

6. Effacer les tâches ayant échoué

Vous pouvez définir directement la méthode ayant échoué dans la classe de tâches, qui peut exécuter la logique d'effacement de la tâche lorsque la tâche échoue. Cet endroit est parfait pour envoyer un avertissement à l'utilisateur ou réinitialiser le fonctionnement de l'exécution de la tâche. Les informations d'exception qui provoquent l'échec de la tâche seront transmises à la méthode ayant échoué :

php artisan queue:work redis --tries=3

[Recommandations associées :

tutoriel vidéo laravel

]

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer