In Laravel kann die Verwendung von Warteschlangen Probleme wie große Parallelität und mehrsprachige Kommunikationsschnittstellen lösen. Zeitaufwändige Aufgaben oder Aufgaben, die nicht in großer Zahl gleichzeitig parallelisiert werden können, können gekapselt und in die Nachrichtenwarteschlange übertragen werden. Auf diese Weise kann der Handler kontinuierlich Nachrichten aus der Nachrichtenwarteschlange extrahieren und verarbeiten Eliminieren Sie die Notwendigkeit einer großen Parallelität.
Die Betriebsumgebung dieses Artikels: Windows 10-System, Laravel Version 6, Dell G3-Computer.
Bei großen Parallelitätsproblemen können zeitaufwändige Aufgaben oder Aufgaben, die nicht in großer Zahl gleichzeitig parallelisiert werden können, gekapselt und in die Nachrichtenwarteschlange übertragen werden. Der Handler extrahiert kontinuierlich Nachrichten aus der Nachrichtenwarteschlange und verarbeitet sie Auf diese Weise kann die Pufferung der Nachrichtenwarteschlange das Blockieren in Situationen mit großer Parallelität verhindern. Wenn die Leistung nicht ausreicht, können Sie mehrere Verarbeitungsaufgaben hinzufügen, um Nachrichten zur Verarbeitung aus der Nachrichtenwarteschlange abzurufen.
Wenn beispielsweise bei Datenbankvorgängen zu viele Lese- und Schreibvorgänge in der Datenbank vorhanden sind, treten Probleme wie das Sperren von Tabellen auf. Das Leseproblem kann durch Caching und andere Lösungen gelöst werden, während das Schreibproblem gelöst werden muss durch Nachrichtenwarteschlangen gelöst.
Darüber hinaus ist es bei der Entwicklung großer Webprojekte in vielen Fällen unmöglich, sie in einer Sprache zu implementieren. Obwohl sie theoretisch alles kann, ist es notwendig, verschiedene Sprachen zu nutzen In der Webentwicklung gibt es einige Die Effizienz der Verwendung zur Lösung von Problemen, z. B. Echtzeit-Socket-Verbindungen und verteilte Transaktionsverarbeitung, wird sehr gering sein.
Verwenden Sie die Nachrichtenwarteschlange von Laravel, um asynchrone Aufgaben zu verarbeiten, Redis als Warteschlangendatenbank, Supervisor-Überwachungsskripts für abnormale Unterbrechungen und automatische Neustarts. Dies ist der Standardprozess von Laravel für die Verarbeitung von Warteschlangenaufgaben. In der Praxis können jedoch verschiedene Probleme auftreten, um das System sicherzustellen Um die Zuverlässigkeit zu gewährleisten, müssen mehrere Punkte beachtet werden.
1. Legen Sie die Anzahl der Wiederholungsversuche für die fehlgeschlagene Aufgabenausführung fest. Stellen Sie sicher, dass Sie die Anzahl der Wiederholungsversuche für die fehlgeschlagene Aufgabenausführung festlegen, um zu vermeiden, dass die Anzahl der Wiederholungsversuche überschritten wird Standardmäßig können Sie den Ausführungsfehler in der Tabelle selbst schreiben oder die nachfolgende Verarbeitungslogik schreiben.php artisan queue:work redis --tries=3
Sie müssen zuerst den folgenden Befehl ausführen, um eine Datentabelle zu erstellen: php artisan queue:failed-tablephp artisan migrate2. Handhabungsprogramm Ausnahmen
Manchmal treten während der Programmausführung Ausnahmen auf, z. B. die Abhängigkeit von anderen Schnittstellen, das Anfordern des HTTP-Schnittstellen-Timeouts usw. Wenn die Ausnahme nicht abgefangen wird, wird die aktuelle Warteschlange unterbrochen und kann nicht weiter ausgeführt werden Inhalte für 10.000 Benutzer erfordern die Verwendung von Schnittstellen-Push. Wenn die Zwischenanforderung hängen bleibt, wirkt sich dies auf nachfolgende Push-Vorgänge aus.Die Ausnahme bezieht sich hier auf eine Ausnahme, die während der Programmausführung auftritt. Dies bedeutet nicht, dass Programmausnahmen nicht unbedingt dazu führen, dass der residente Prozess unterbrochen wird .
Codeausschnitte wie das Abfangen von Ausnahmen: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()); }
Laravel-Video-Tutorial
]Das obige ist der detaillierte Inhalt vonWarum Laravel die Warteschlange verwendet. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!