Defective Code Logo

Total Downloads Latest Stable Version Latest Stable Version

English | العربية | বাংলা | Bosanski | Deutsch | Español | Français | हिन्दी | Italiano | 日本語 | 한국어 | मराठी | Português | Русский | Kiswahili | தமிழ் | తెలుగు | Türkçe | اردو | Tiếng Việt | 中文

Laravel SQS Erweitert

Einführung

Laravel SQS Erweitert ist ein Laravel-Queue-Treiber, der entwickelt wurde, um die Größenbeschränkungen für AWS SQS-Payloads zu umgehen. Dieser Queue-Treiber serialisiert automatisch große Payloads auf einer Festplatte (typischerweise S3) und deserialisiert sie dann zur Laufzeit. Dieses Paket nahm Anregungen von https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-s3-messages.html.

Migration vom einfachen SQS-Erweitert-Client

  1. Entfernen Sie das Paket simplesoftwareio/simple-sqs-extended-client aus Ihrem Projekt.
  2. Installieren Sie das Paket defectivecode/laravel-sqs-extended.

Die alte Konfiguration ist abwärtskompatibel mit dem neuen Paket. Die einzige Änderung ist der Paketname.

Installation

  1. Erstellen Sie zuerst einen Bucket, der alle Ihre großen SQS-Payloads speichern wird.

Wir empfehlen dringend, einen privaten Bucket zu verwenden, wenn Sie SQS-Payloads speichern. Payloads können sensible Informationen enthalten und sollten niemals öffentlich geteilt werden.

  1. Führen Sie composer require defectivecode/laravel-sqs-extended aus, um den Queue-Treiber zu installieren.

  2. Fügen Sie dann die folgenden Standard-Queue-Einstellungen in Ihre queue.php-Datei ein.

Laravel Vapor-Benutzer müssen den Verbindungsnamen auf sqs setzen. Die sqs-Verbindung wird innerhalb des Vapor Core gesucht, und diese Bibliothek funktioniert nicht wie erwartet, wenn Sie einen anderen Verbindungsnamen verwenden.

/*
|--------------------------------------------------------------------------
| SQS Disk Queue Konfiguration
|--------------------------------------------------------------------------
|
| Hier können Sie den SQS-Disk-Queue-Treiber konfigurieren. Er teilt alle
| Konfigurationsoptionen des integrierten Laravel SQS-Queue-Treibers. Die einzige
| hinzugefügte Option ist `disk_options`, die unten erklärt wird.
|
| always_store: Bestimmt, ob alle Payloads unabhängig von der Größenbeschränkung der Queue auf einer Festplatte gespeichert werden sollen.
| cleanup: Bestimmt, ob die Payload-Dateien von der Festplatte entfernt werden sollten, sobald der Job verarbeitet wurde. Das Zurücklassen der
| Dateien kann nützlich sein, um die Queue-Jobs später aus Debugging-Gründen erneut abzuspielen.
| disk: Die Festplatte, auf der SQS-Payloads gespeichert werden. Diese Festplatte sollte in Ihrer Laravel-configuration.filesystems.php konfiguriert werden.
| max_size: Optional. Legt die Offload-Schwelle auf eine feste Anzahl von Bytes fest. Wenn weggelassen, wird die Schwelle von
| der Queue selbst gelesen. Siehe "Payload-Größenschwelle" unten.
| prefix Der Präfix (Ordner), um die Payloads zu speichern. Dies ist nützlich, wenn Sie eine Festplatte mit anderen SQS-Queues teilen.
| Die Verwendung eines Präfixes ermöglicht es dem queue:clear-Befehl, die Dateien separat von anderen SQS-Queues zu löschen,
| die dieselbe Festplatte teilen.
|
*/
'sqs' => [
'driver' => 'sqs-disk',
'key' => env('AWS_ACCESS_KEY_ID'),
'secret' => env('AWS_SECRET_ACCESS_KEY'),
'prefix' => env('SQS_PREFIX', 'https://sqs.us-east-1.amazonaws.com/your-account-id'),
'queue' => env('SQS_QUEUE', 'default'),
'suffix' => env('SQS_SUFFIX'),
'region' => env('AWS_DEFAULT_REGION', 'us-east-1'),
'after_commit' => false,
'disk_options' => [
'always_store' => false,
'cleanup' => false,
'disk' => env('SQS_DISK'),
'prefix' => 'bucket-prefix',
],
],
  1. Starten Sie Ihre Queues und profitieren Sie, ohne sich um die Payload-Grenze von SQS sorgen zu müssen 🥳

Payload-Größenschwelle

AWS hat die maximale SQS-Payload von 256 KiB auf 1 MiB im August 2025 erhöht, aber MaximumMessageSize ist ein Attribut pro Queue – Queues, die vor dieser Änderung erstellt wurden, behalten den älteren Wert von 262144 Bytes, bis Sie ihn erhöhen. Anstatt von einer Einschränkung auszugehen, liest dieses Paket das Attribut von der Queue und lädt nur das ab, was tatsächlich nicht passt.

Die Schwelle wird in folgender Reihenfolge bestimmt, und die erste Übereinstimmung gewinnt. Eine Payload wird auf der Festplatte gespeichert, wenn ihre Länge größer oder gleich der bestimmten Schwelle ist.

Bedingung Schwelle Liest das Queue-Attribut
always_store ist true Jede Payload wird gespeichert Nein
max_size ist gesetzt Der konfigurierte Wert Nein
Queue meldet 262144 (der Standard vor 2025) 250000 Ja
Queue meldet 1048576 (auf das Maximum erhöht) 1036432 Ja
Attribut kann nicht gelesen werden 250000 Wurde einmal versucht

Die reservierte Überhang von 12144 Bytes deckt die pro-Nachricht-Übertragung ab und ist so dimensioniert, dass eine Queue, die auf dem Standard von 262144 Bytes verbleibt, auf die Schwelle von 250000 Bytes kommt, die von früheren Versionen dieses Pakets verwendet wird. Ein Upgrade ändert das Verhalten nicht, bis Sie die eigene Grenze der Queue erhöhen.

Berechtigungen

Das Lesen des Attributs erfordert sqs:GetQueueAttributes. Das Ergebnis wird im Speicher pro Queue zwischengespeichert, sodass dies einen Aufruf pro Queue für die Lebensdauer des Prozesses kostet und nicht einen Aufruf pro Job.

Wenn das Attribut nicht gelesen werden kann – eine enge IAM-Richtlinie oder ein SQS-Emulator, der dies nicht umsetzt – greift der Treiber auf die Schwelle von 250000 Bytes zurück und fährt mit der Durchsetzung fort. Setzen Sie max_size, um die Abfrage vollständig zu überspringen, wenn Sie die Berechtigung lieber nicht gewähren möchten.

Erhöhung der Grenze einer Queue

aws sqs set-queue-attributes \
--queue-url https://sqs.us-east-1.amazonaws.com/your-account-id/your-queue \
--attributes MaximumMessageSize=1048576

Bitte beachten Sie, dass SQS die Nutzung in 64 KB-Chunks misst, sodass eine einzelne 1 MiB-Nachricht als 16 Anfragen abgerechnet wird. Das Speichern großer Payloads auf einer Festplatte ist oft weiterhin der preiswertere Weg.

Support Richtlinien

Danke, dass Sie sich für unser Open-Source-Paket entschieden haben! Bitte nehmen Sie sich einen Moment Zeit, um diese Unterstützungsrichtlinien durchzulesen. Sie helfen Ihnen, das Beste aus unserem Projekt herauszuholen.

Community-gesteuerte Unterstützung

Unser Open-Source-Projekt wird von unserer großartigen Community unterstützt. Wenn Sie Fragen haben oder Hilfe benötigen, sind StackOverflow und andere Online-Ressourcen Ihre besten Optionen.

Bugs und Priorisierung von Funktionen

Die Realität des Managements eines Open-Source-Projekts bedeutet, dass wir nicht sofort jeden gemeldeten Fehler oder jede Funktionsanfrage angehen können. Wir priorisieren Probleme in der folgenden Reihenfolge:

1. Bugs, die unsere kostenpflichtigen Produkte betreffen

Bugs, die unsere kostenpflichtigen Produkte beeinträchtigen, haben immer die höchste Priorität. In einigen Fällen behandeln wir möglicherweise nur Bugs, die uns direkt betreffen.

2. Community Pull Requests

Wenn Sie einen Bug identifiziert haben und eine Lösung haben, reichen Sie bitte einen Pull Request ein. Nach den Problemen, die unsere Produkte betreffen, geben wir diesen community-gesteuerten Fehlerbehebungen die nächsthöchste Priorität. Sobald Ihr Lösungsvorschlag geprüft und genehmigt wurde, werden wir Ihre Lösung zusammenführen und Ihre Beiträge anerkennen.

3. Finanzielle Unterstützung

Für Probleme außerhalb der genannten Kategorien können Sie sich entscheiden, deren Lösung zu finanzieren. Jedes offene Problem ist mit einem Bestellformular verknüpft, über das Sie finanziell beitragen können. Wir priorisieren diese Probleme basierend auf dem bereitgestellten Finanzierungsbetrag.

Community-Beiträge

Open Source gedeiht, wenn seine Community aktiv ist. Auch wenn Sie keine Bugs beheben, ziehen Sie in Betracht, durch Codeverbesserungen, Dokumentationsaktualisierungen, Tutorials oder durch Unterstützung anderer in Community-Kanälen einen Beitrag zu leisten. Wir ermutigen alle, als Community zusammenzuarbeiten, um die Arbeit im Bereich Open Source zu unterstützen.

Nocht einmal: DefectiveCode wird Bugs priorisieren, basierend darauf, wie sie unsere kostenpflichtigen Produkte, Community-Pull-Requests und die finanzielle Unterstützung für Probleme beeinträchtigen.

Lizenz - MIT Lizenz

Copyright © Defective Code, LLC. Alle Rechte vorbehalten

Hiermit wird jedermann, der eine Kopie dieser Software und der dazugehörigen Dokumentationsdateien (die "Software") erhält, kostenlos die Erlaubnis erteilt, die Software ohne Einschränkung zu nutzen, einschließlich, aber nicht beschränkt auf das Recht, die Software zu verwenden, zu kopieren, zu modifizieren, zusammenzuführen, zu veröffentlichen, zu vertreiben, Unterlizenzen zu erteilen und/oder Kopien der Software zu verkaufen, sowie Personen, denen die Software bereitgestellt wird, dies zu gestatten, vorbehaltlich der folgenden Bedingungen:

Die obige Urheberrechtshinweis und diese Erlaubnismitteilung sind in allen Kopien oder wesentlichen Teilen der Software enthalten.

DIE SOFTWARE WIRD "WIE BESEHEN" BEREITGESTELLT, OHNE GARANTIE IRGENDWELCHER ART, WEDER AUSDRÜCKLICH NOCH STILLSCHWEIGEND, EINSCHLIESSLICH, ABER NICHT BEGRENZT AUF DIE GARANTIEN DER MARKTFÄHIGKEIT, EIGNUNG FÜR EINEN BESTIMMTEN ZWECK UND NICHTVERLETZUNG. IN KEINEM FALL SIND DIE AUTOREN ODER URHEBERRECHTSINHABER FÜR IRGENDEINEN ANSPRUCH, SCHÄDEN ODER ANDERE HAFTUNGEN HAFTBAR, OB IN EINER KLAUSEL FÜR VERTRAG, DELIKT ODER ANDERS, DIE AUS DER SOFTWARE ODER DER NUTZUNG ODER ANDEREN GEHEIMNISSEN IN DER SOFTWARE ENTSTEHEN.