Dans Laravel, une file d'attente est une table linéaire avec des opérations restreintes. Elle autorise uniquement les opérations de suppression à l'avant de la table (tête de file d'attente) et les opérations d'insertion à l'arrière de la table (queue de file d'attente) ; , développement L'utilisateur peut reporter le traitement des tâches chronophages à une date ultérieure, ce qui peut grandement améliorer la vitesse de réponse des requêtes Web.
L'environnement d'exploitation de ce tutoriel : système Windows 7, version Laravel 6, ordinateur Dell G3.
1. Qu'est-ce qu'une file d'attente
Une table linéaire avec des opérations restreintes est qu'elle autorise uniquement les opérations de suppression au début de. la table et les opérations d'insertion sont effectuées sur le backend de la table. L'extrémité qui effectue l'opération d'insertion est appelée la queue de la file d'attente, et l'extrémité qui effectue l'opération de suppression est appelée la tête de la file d'attente.
Avec les files d'attente, vous pouvez reporter le traitement des tâches chronophages (comme l'envoi d'e-mails) à plus tard. Retarder ces tâches chronophages peut améliorer considérablement la vitesse de réponse aux requêtes Web.
2. Avantages
Découplage : la file d'attente des messages peut découpler le système, améliorer la vitesse de réponse, et les fonctions du système sont regroupées vers l'intérieur et ouvertes vers l'extérieur ; peut être asynchrone par rapport au système Les fonctions sont supprimées pour réduire le couplage fonctionnel et améliorer l'efficacité du développement ; Configuration
fichier de configuration de la file d'attente Stocké dans config/queue.php. Dans ce fichier, vous pouvez trouver la configuration de connexion pour chaque pilote de file d'attente inclus dans le framework, qui comprend la base de données, Beanstalkd, Amazon SQS, Redis et un pilote de synchronisation (sync - pour une utilisation locale).
Redis est utilisé comme pilote ici, et Redis et les extensions associées doivent être installées. Nous devons mettre quelque chose dans la file d'attente, nous pouvons appeler cela une tâche. La création de tâches dans le framework Laravel nous fournit les commandes suivantes : php artisan make:job TestJob
namespace App\Jobs;use Illuminate\Bus\Queueable;use Illuminate\Contracts\Queue\ShouldBeUnique;use Illuminate\Contracts\Queue\ShouldQueue;use Illuminate\Foundation\Bus\Dispatchable;use Illuminate\Queue\InteractsWithQueue;use Illuminate\Queue\SerializesModels;use Illuminate\Support\Facades\DB;use Symfony\Polyfill\Intl\Idn\Info;class TestJob implements ShouldQueue{ use Dispatchable, InteractsWithQueue, Queueable, SerializesModels; /** * Create a new job instance. * * @return void */ public function __construct() { // } /** * Execute the job. * * @return void */ public function handle() {// \Log::info('hhh'); DB::connection('test') ->table('master') ->insert([ 'name'=>'小白', 'email'=>'123@qq.com' ]); }}
5. DistributionUne fois la classe de tâches écrite, vous pouvez utiliser la méthode de répartition de la tâche elle-même. pour l'expédier. Les paramètres passés à la méthode de répartition seront transmis au constructeur de la tâche. :Onqueue : Spécifier la file d'attente ;
OnConnection : Spécifier la connexion ;Dlay : file d'attente différée ;
DispatchNow : Planification synchroneExécuter deux fois. dispose d'un processeur de file d'attente pour traiter les tâches nouvellement placées dans la file d'attente. Démarrez le processeur de file d'attente avec la commande Artisan queue:work. Il est à noter qu'une fois la commande queue:work lancée, elle continuera à s'exécuter jusqu'à ce qu'elle soit arrêtée manuellement ou que vous fermiez votre terminal :
php artisan queue:workphp artisan queue:work --once Ajouter des paramètres, consommer Spécifiez la file d'attente
#在路由中简单调用 Route::get('queue',function(){ \App\Jobs\TestJob::dispatch(); // \App\Jobs\TestJob::dispatch()->onQueue('qq'); });
Nous exécutons à nouveau le routage
7. File d'attente des événements
La file d'attente est généralement utilisée pour gérer les tâches retardées et les événements sont traités par la logique métier. Les déclencheurs d'événements dans Laravel sont distribués dans des files d'attente pour un traitement métier asynchrone, afin que vous puissiez répondre rapidement sans avoir à attendre les résultats de l'exécution en temps réel avant d'envoyer des messages d'invite aux utilisateurs.
Si nous devons stocker l'entreprise de l'événement dans la file d'attente, nous n'avons pas besoin de redistribuer la file d'attente. Nous pouvons directement implémenter l'interface IlluminateContractsQueueShouldQueue dans l'écouteur correspondant.Créer des événements et des auditeurs
S'inscrire dans appprovidersEventServiceProvider.php#消费qq队列 php artisan queue:work --queue=qqCopier après la connexion
TestListener.php
php artisan make:event TestEvent php artisan make:listener TestListener
Modifier la route
namespace App\Listeners; use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Queue\InteractsWithQueue; use Illuminate\Support\Facades\DB; class TestListener implements ShouldQueue { /** * Create the event listener. * * @return void */ public function __construct() { // } /** * Handle the event. * * @param object $event * @return void */ public function handle() { DB::connection('test') ->table('master') ->insert([ 'name'=>'小黑', 'email'=>'234@qq.com' ]); } }
Route::get('queue',function(){ //\App\Jobs\TestJob::dispatch(); //指定队列名称 //\App\Jobs\TestJob::dispatch()->onQueue('qq'); return event(new \App\Events\TestEvent()); });
【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!