Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Wie kann ich verhindern, dass ein Job nach Wiederholungsversuchen aus der SQS-Warteschlange verschwindet?


Wie kann ich verhindern, dass ein Job nach Wiederholungsversuchen aus der SQS-Warteschlange verschwindet?


Um zu verhindern, dass ein Job nach Wiederholungsversuchen aus der SQS-Warteschlange verschwindet, können Sie die folgenden Ansätze ausprobieren:

1. Erhöhen Sie das maximale Empfangslimit in SQS:
– Standardmäßig verfügt SQS über ein „Maximum Receives“-Limit, das die maximale Häufigkeit bestimmt, mit der eine Nachricht aus der Warteschlange empfangen werden kann, bevor sie in die Dead-Letter-Queue (DLQ) verschoben wird.
- Erhöhen Sie den Grenzwert „Maximale Empfangsanzahl“ für Ihre SQS-Warteschlange auf einen höheren Wert, z. B. 10 oder 20, um mehr Wiederholungsversuche zu ermöglichen, bevor der Job in die DLQ verschoben wird.

2. Deaktivieren Sie die Warteschlange für unzustellbare Nachrichten (DLQ):
– Wenn Sie die DLQ-Funktionalität nicht benötigen, können Sie sie für Ihre SQS-Warteschlange deaktivieren. Dadurch wird verhindert, dass der Job nach der maximalen Anzahl von Wiederholungsversuchen in die DLQ verschoben wird.
– Um die DLQ zu deaktivieren, können Sie entweder eine neue SQS-Warteschlange ohne DLQ erstellen oder die Konfiguration der vorhandenen Warteschlange ändern, um die DLQ zu entfernen.

3. Erhöhen Sie das Sichtbarkeits-Timeout:
– Das Visibility Timeout in SQS bestimmt die Zeitspanne, die eine Nachricht nach dem Empfang für andere Verbraucher unsichtbar ist.
- Erhöhen Sie das Sichtbarkeits-Timeout auf einen höheren Wert, z. B. 1 Stunde oder 2 Stunden, um dem Job mehr Zeit für die Verarbeitung zu geben, bevor er für einen weiteren Wiederholungsversuch wieder sichtbar wird.

4. Benutzerdefinierte Wiederholungslogik implementieren:
- Anstatt sich ausschließlich auf die Methode „retryUntil“ zu verlassen, können Sie eine benutzerdefinierte Wiederholungslogik in der Methode „handle“ Ihres Jobs implementieren.
– Dazu kann es erforderlich sein, die Anzahl der Versuche zu überprüfen und den Job mit einer benutzerdefinierten Verzögerung manuell wieder in die Warteschlange freizugeben, anstatt die Wiederholungsversuche dem Warteschlangensystem zu überlassen.

5. Verwenden Sie einen benutzerdefinierten SQS-Warteschlangentreiber:
– Wie in den vorherigen Antworten erwähnt, können Sie einen benutzerdefinierten SQS-Warteschlangentreiber erstellen, der die Standardklasse „SqsQueue“ erweitert und zusätzliche Funktionen hinzufügt, um Wiederholungsversuche zu verarbeiten und das Verschwinden von Jobs zu verhindern.
– Dadurch können Sie das Wiederholungsverhalten besser steuern und sicherstellen, dass Aufträge nicht verloren gehen oder vorzeitig aus der Warteschlange entfernt werden.

Durch die Implementierung eines oder mehrerer dieser Ansätze können Sie verhindern, dass Ihre Jobs nach Wiederholungsversuchen aus der SQS-Warteschlange verschwinden, und sicherstellen, dass sie erfolgreich verarbeitet oder wie erwartet in die DLQ verschoben werden.

Zitate:
[1] https://dev.to/ichtrojan/configuring-laravel-queues-with-aws-sqs-3f0n
[2] https://www.honeybadger.io/blog/laravel-queues-deep-dive/
[3] https://stackoverflow.com/questions/71411471/laravel-retryuntil-job-exits-after-4th-retry-without-failing
[4] https://laracasts.com/discuss/channels/laravel/queue-job-retry-after-x-minutes-if-failed
[5] https://github.com/shiftonelabs/laravel-sqs-fifo-queue