Dans Laravel, l'utilisation de files d'attente peut résoudre des problèmes tels que la grande concurrence et les interfaces de communication multilingues. Les tâches fastidieuses ou les tâches qui ne peuvent pas être parallélisées en grand nombre en même temps peuvent être encapsulées et transférées vers la file d'attente de messages. Le gestionnaire extraira en permanence les messages de la file d'attente de messages et les traitera de cette manière. éliminer le besoin de concurrence à grande échelle.
L'environnement d'exploitation de cet article : système Windows 10, Laravel version 6, ordinateur Dell G3.
La file d'attente de messages est un module essentiel pour les projets Web à grande échelle. Grâce à la file d'attente de messages, des problèmes tels que la grande concurrence et les interfaces de communication multilingues peuvent être résolus.
Pour les problèmes de concurrence importants, les tâches fastidieuses ou les tâches qui ne peuvent pas être parallélisées en grand nombre en même temps peuvent être encapsulées et transférées vers la file d'attente des messages. Le gestionnaire extraira en continu les messages de la file d'attente des messages et les traitera. De cette manière, la mise en mémoire tampon de la file d'attente des messages peut éviter le blocage dans les situations de concurrence importante. Si les performances ne sont pas suffisantes, vous pouvez ajouter plusieurs tâches de traitement pour obtenir des messages de la file d'attente des messages à traiter.
Par exemple, dans les opérations de base de données, lorsqu'il y a trop d'opérations de lecture et d'écriture sur la base de données, des problèmes tels que le verrouillage des tables se produiront. Le problème de lecture peut être résolu via la mise en cache et d'autres solutions, tandis que le problème d'écriture doit l'être. résolu par les files d'attente de messages.
De plus, dans le développement de projets Web à grande échelle, il est dans de nombreux cas impossible de l'implémenter via un seul langage. Il est nécessaire de tirer parti de différents langages, comme PHP, même si, en théorie, il peut tout faire. dans le développement Web, il y en a. L'efficacité de son utilisation pour résoudre des problèmes, tels que les connexions socket en temps réel et le traitement des transactions distribuées, sera très faible.
Utilisez la file d'attente de messages de Laravel pour traiter les tâches asynchrones, Redis comme base de données de file d'attente, l'interruption anormale du script de surveillance du superviseur et le redémarrage automatique, il s'agit du processus standard de Laravel pour le traitement des tâches de file d'attente, mais dans la pratique, divers problèmes peuvent survenir, afin de garantir que le système fiabilité, nous devons prêter attention à plusieurs problèmes.
1. Définition du nombre de tentatives en cas d'échec d'exécution
Assurez-vous de définir le nombre de tentatives pour l'exécution d'une tâche ayant échoué afin d'éviter des tentatives infinies d'échec. Si le nombre de tentatives est dépassé, Laravel l'écrira dans la tâche ayant échoué. table par défaut, ou vous pouvez écrire vous-même l'échec d'exécution Logique de traitement ultérieur.
php artisan queue:work redis --tries=3
Vous devez d'abord exécuter la commande suivante pour créer une table de données :
php artisan queue:failed-table
php artisan migrate
2. Programme de gestion exceptions
Parfois, des exceptions se produiront pendant l'exécution du programme, comme le recours à d'autres interfaces, la demande de délai d'attente de l'interface HTTP, etc. Si l'exception n'est pas interceptée, la file d'attente actuelle sera interrompue et ne pourra pas continuer à s'exécuter. le contenu à 10 000 utilisateurs nécessite de s'appuyer sur l'interface push , si la requête intermédiaire se bloque, cela affectera les push suivants.
L'exception ici fait référence à une exception qui se produit pendant l'exécution du programme. Cela ne signifie pas que le processus résident raccroche. Les exceptions du programme n'entraînent pas nécessairement l'interruption du processus résident. De plus, les interruptions du processus sont surveillées et redémarrées par le superviseur. .
Extraits de code tels que la détection des exceptions :
try {undefined $r = $client->request('POST', '', [ 'query' => [ 'client_name' => 'filemail', 'client_version' => '1.0', 'client_sequence' => 0, 'uid' => 692934013,//119481237 'r' => 1508312484, ], 'body' => \GuzzleHttp\json_encode($body), ]); $result = $r->getBody()->getContents(); $result = json_decode($result, true); if ($result['result'] == 0) {undefined info("sendMail fail:" . json_encode($result)); $this->pushLog($task['id'], $task['mail_id'], implode(',', $userIds), json_encode($result), 0); } else {undefined Log::warning("sendMail fail:" . json_encode($result)); $this->pushLog($task['id'], $task['mail_id'], implode(',', $userIds), json_encode($result), $result['result']); } } catch (RequestException $e) {undefined Log::warning('RequestException' . $e->getMessage()); } catch (Exception $e) {undefined Log::emergency('Exception' . $e->getMessage()); }
[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!