Maison > cadre php > Laravel > Pourquoi Laravel utilise la file d'attente

Pourquoi Laravel utilise la file d'attente

WBOY
Libérer: 2022-03-14 16:45:24
original
2776 Les gens l'ont consulté

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.

Pourquoi Laravel utilise la file d'attente

L'environnement d'exploitation de cet article : système Windows 10, Laravel version 6, ordinateur Dell G3.

Pourquoi Laravel utilise les files d'attente

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());
}
Copier après la connexion

[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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal