Aby zapobiec zniknięciu zadania z kolejki SQS po ponownych próbach, możesz wypróbować następujące rozwiązania:
1. Zwiększ maksymalny limit odbiorów w SQS:
- Domyślnie SQS ma limit „Maksymalnej liczby odebranych”, który określa maksymalną liczbę odebranych wiadomości z kolejki, zanim zostaną przeniesione do kolejki utraconych wiadomości (DLQ).
— Zwiększ limit „Maksymalnej liczby odbiorów” dla kolejki SQS do wyższej wartości, np. 10 lub 20, aby umożliwić więcej ponownych prób, zanim zadanie zostanie przeniesione do DLQ.
2. Wyłącz kolejkę utraconych wiadomości (DLQ):
- Jeśli nie potrzebujesz funkcjonalności DLQ, możesz ją wyłączyć dla swojej kolejki SQS. Zapobiegnie to przeniesieniu zadania do DLQ po maksymalnej liczbie ponownych prób.
- Aby wyłączyć DLQ, możesz albo utworzyć nową kolejkę SQS bez DLQ, albo zmodyfikować konfigurację istniejącej kolejki, aby usunąć DLQ.
3. Zwiększ limit czasu widoczności:
- Limit czasu widoczności w SQS określa czas, przez który wiadomość jest niewidoczna dla innych konsumentów po jej odebraniu.
— Zwiększ limit czasu widoczności do wyższej wartości, na przykład 1 godziny lub 2 godzin, aby dać zadaniu więcej czasu na przetworzenie, zanim stanie się ono ponownie widoczne przy kolejnej próbie.
4. Zaimplementuj niestandardową logikę ponawiania:
- Zamiast polegać wyłącznie na metodzie `retryUntil`, możesz zaimplementować niestandardową logikę ponawiania prób w metodzie `handle` swojego zadania.
— Może to obejmować sprawdzenie liczby prób i ręczne zwolnienie zadania z powrotem do kolejki z niestandardowym opóźnieniem, zamiast pozwalania systemowi kolejek na obsługę ponownych prób.
5. Użyj niestandardowego sterownika kolejki SQS:
- Jak wspomniano w poprzednich odpowiedziach, możesz utworzyć niestandardowy sterownik kolejki SQS, który rozszerza domyślną klasę `SqsQueue` i dodaje dodatkowe funkcje do obsługi ponownych prób i zapobiegania znikaniu zadań.
— Może to zapewnić większą kontrolę nad zachowaniem ponawiania prób i zapewnić, że zadania nie zostaną utracone lub przedwcześnie usunięte z kolejki.
Wdrażając jedno lub więcej z tych podejść, możesz zapobiec znikaniu zadań z kolejki SQS po ponownych próbach i zapewnić, że zostaną one pomyślnie przetworzone lub przeniesione do DLQ zgodnie z oczekiwaniami.
Cytaty:[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-minuty-if-failed
[5] https://github.com/shiftonelabs/laravel-sqs-fifo-queue