Laravel metodas „retryUntil“ sąveikauja su AWS SQS tokiu būdu:
1. Pakartotinio bandymo termino nurodymas: kai apibrėžiate metodą „retryUntil“ savo užduočių klasėje, nurodote terminą, kada užduotis turi nustoti bandyti iš naujo. Šis terminas perduodamas SQS eilei kaip parametras „VisibilityTimeout“, kai darbas išsiunčiamas.
2. Pakartotiniai bandymai: kai užduotis nepavyksta, SQS pranešimą padarys nematomą nurodytą „VisibilityTimeout“ trukmę, leisdama „Laravel“ eilės darbuotojui dar kartą bandyti apdoroti užduotį. Jei užduotis vėl nepavyks per „VisibilityTimeout“ laikotarpį, SQS ir toliau padarys pranešimą nematomą, todėl bus galima toliau bandyti.
3. Pasiekiamas pakartotinio bandymo terminas: pasibaigus „VisibilityTimeout“ laikotarpiui (kaip nurodyta „retryUntil“ metodu), SQS pranešimas vėl bus matomas, o „Laravel“ eilės darbuotojas nebebandys apdoroti darbas. Šiuo metu darbas bus laikomas „neįvykdytu“ ir gali būti atitinkamai tvarkomas (pvz., perkeltas į „mirusių laiškų“ eilę).
4. Sąveika su SQS konfigūracijomis: svarbu atkreipti dėmesį, kad metodo „retryUntil“ veikimui gali turėti įtakos SQS eilės konfigūracija, pvz., „MessageRetentionPeriod“ ir „VisibilityTimeout“ nustatymai. Šios SQS lygio konfigūracijos gali nepaisyti arba sąveikauti su „retryUntil“ metodu „Laravel“.
Pavyzdžiui, jei SQS „VisibilityTimeout“ nustatyta į mažesnę reikšmę nei „retryUntil“ terminas, užduotis gali būti bandoma iš naujo daugiau kartų, nei tikėtasi. Ir atvirkščiai, jei „MessageRetentionPeriod“ yra nustatyta į mažesnę reikšmę nei „retryUntil“ terminas, užduotis gali būti pašalinta iš eilės nepasibaigus pakartotinio bandymo terminui.
Norint užtikrinti, kad metodas „retryUntil“ veiktų taip, kaip tikėtasi, labai svarbu suderinti „Laravel“ užduoties konfigūraciją su SQS eilės konfigūracija, atsižvelgiant į šių nustatymų sąveiką.
Apibendrinant galima pasakyti, kad „Laravel“ metodas „retryUntil“ sąveikauja su AWS SQS nustatydamas parametrą „VisibilityTimeout“, kuris valdo užduoties pakartotinio bandymo elgesį. Tačiau bendram elgesiui įtakos turi ir SQS eilės konfigūracija, todėl svarbu užtikrinti, kad šie parametrai būtų tinkamai suderinti.
Citatos:[1] https://stackoverflow.com/questions/71411471/laravel-retryuntil-job-exits-after-4th-retry-without-failing
[2] https://www.honeybadger.io/blog/laravel-queues-deep-dive/
[3] https://ahmedshamim.com/posts/retry-mechanisms-in-laravel
[4] https://devinthewild.com/article/add-delay-job-retries-laravel
[5] https://laracasts.com/discuss/channels/laravel/queue-job-retry-after-x-minutes-if-failed