Heim > PHP-Framework > Laravel > Warum Laravel die Warteschlange verwendet

Warum Laravel die Warteschlange verwendet

WBOY
Freigeben: 2022-03-14 16:45:24
Original
2776 Leute haben es durchsucht

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.

Warum Laravel die Warteschlange verwendet

Die Betriebsumgebung dieses Artikels: Windows 10-System, Laravel Version 6, Dell G3-Computer.

Warum Laravel Warteschlangen verwendet? Nachrichtenwarteschlangen sind ein wesentliches Modul für große Webprojekte. Durch Nachrichtenwarteschlangen können Probleme wie große Parallelität und mehrsprachige Kommunikationsschnittstellen gelöst werden.

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-table

php artisan migrate

2. 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());
}
Nach dem Login kopieren

[Verwandte Empfehlungen:

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!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage