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.
【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
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 :
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, ],
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 *******************/
php artisan queue:work
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.logLa 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 migrate6. 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 :
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!