Laraveli meetod "retryUntil" suhtleb AWS SQS-iga järgmisel viisil:
1. Uuesti proovimise tähtaja määramine: kui määrate oma tööklassis meetodi "retryUntil", määrate tähtaja, millal töö uuesti proovimine peaks lõppema. See tähtaeg edastatakse töö lähetamisel SQS-i järjekorda parameetrina "VisibilityTimeout".
2. Korduskatsed: kui töö ebaõnnestub, muudab SQS sõnumi määratud "VisibilityTimeout" kestuse ajaks nähtamatuks, võimaldades Laraveli järjekorratöötajal proovida tööd uuesti töödelda. Kui töö nurjub uuesti "VisibilityTimeout" perioodi jooksul, muudab SQS jätkuvalt sõnumi nähtamatuks, võimaldades edasisi korduskatseid.
3. Uuesti proovimise tähtajani jõudmine: kui periood "VisibilityTimeout" (nagu on määratud meetodiga "retryUntil") on möödunud, muudab SQS sõnumi uuesti nähtavaks ja Laraveli järjekorratöötaja ei ürita enam töö. Sel hetkel loetakse töö nurjunuks ja seda saab vastavalt käsitleda (nt teisaldada surnud kirjade järjekorda).
4. Suhtlemine SQS-i seadistustega: on oluline arvestada, et meetodi `retryUntil` käitumist võivad mõjutada SQS-i järjekorra konfiguratsioon, näiteks sätted "MessageRetentionPeriod" ja "VisibilityTimeout". Need SQS-taseme konfiguratsioonid võivad Laraveli meetodi "retryUntil" alistada või sellega suhelda.
Näiteks kui SQS "VisibilityTimeout" on seatud madalamale väärtusele kui "retryUntil" tähtaeg, võidakse tööd uuesti proovida oodatust rohkem kordi. Vastupidi, kui "MessageRetentionPeriod" on seatud madalamale väärtusele kui "retryUntil" tähtaeg, võidakse töö enne korduskatse tähtaja saabumist järjekorrast eemaldada.
Tagamaks, et meetod "retryUntil" töötaks ootuspäraselt, on ülioluline joondada Laraveli töö konfiguratsioon SQS-i järjekorrakonfiguratsiooniga, võttes arvesse nende sätete vahelisi koostoimeid.
Kokkuvõtteks võib öelda, et Laraveli meetod "retryUntil" suhtleb AWS SQS-iga, määrates parameetri "VisibilityTimeout", mis juhib töö uuesti proovimise käitumist. Kuid üldist käitumist mõjutab ka SQS-i järjekorra konfiguratsioon ja on oluline tagada, et need sätted oleksid õigesti joondatud.
Tsitaadid:[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