Jei norite, kad darbas nedingtų iš SQS eilės po pakartotinių bandymų, galite išbandyti šiuos būdus:
1. Padidinkite didžiausią SQS gavimo limitą:
- Pagal numatytuosius nustatymus SQS turi "Maksimalų gavimo" limitą, kuris nustato maksimalų skaičių kartų, kai pranešimas gali būti gautas iš eilės, prieš perkeliant jį į "Dead-Letter Queue" (DLQ).
- Padidinkite SQS eilės „Maksimalių gavimo“ ribą iki didesnės vertės, pvz., 10 arba 20, kad būtų galima atlikti daugiau bandymų prieš perkeliant užduotį į DLQ.
2. Išjungti „Dead-Letter Queue“ (DLQ):
- Jei jums nereikia DLQ funkcijos, galite ją išjungti savo SQS eilėje. Tai neleis užduoties perkelti į DLQ po didžiausio pakartotinių bandymų skaičiaus.
- Norėdami išjungti DLQ, galite sukurti naują SQS eilę be DLQ arba modifikuoti esamos eilės konfigūraciją, kad pašalintumėte DLQ.
3. Padidinkite matomumo skirtąjį laiką:
- SQS matomumo laikas nustato, kiek laiko pranešimas yra nematomas kitiems vartotojams po jo gavimo.
- Padidinkite matomumo skirtąjį laiką iki didesnės vertės, pvz., 1 valandos arba 2 valandų, kad užduotį būtų galima apdoroti daugiau laiko, kol ji vėl taps matoma dar kartą.
4. Įdiekite tinkintą pakartotinio bandymo logiką:
- Užuot pasikliavę vien metodu „retryUntil“, galite įdiegti pasirinktinę pakartotinio bandymo logiką savo darbo „rankenos“ metodu.
- Tai gali apimti bandymų skaičiaus patikrinimą ir rankinio darbo grąžinimą į eilę su pasirinktu delsimu, o ne leidimą eilės sistemai tvarkyti bandymus.
5. Naudokite tinkintą SQS eilės tvarkyklę:
- Kaip minėta ankstesniuose atsakymuose, galite sukurti pasirinktinę SQS eilės tvarkyklę, kuri praplečia numatytąją „SqsQueue“ klasę ir prideda papildomų funkcijų, kad būtų galima apdoroti pakartotinius bandymus ir užkirsti kelią užduočių išnykimui.
- Tai gali suteikti jums daugiau galimybių kontroliuoti pakartotinio bandymo elgesį ir užtikrinti, kad darbai nebus prarasti arba anksčiau laiko nepašalinami iš eilės.
Įdiegę vieną ar kelis iš šių metodų, galite neleisti savo darbams dingti iš SQS eilės po pakartotinių bandymų ir užtikrinti, kad jie būtų sėkmingai apdoroti arba perkelti į DLQ, kaip tikėtasi.
Citatos:[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