Metoda `retryUntil` v Laravelu sodeluje z AWS SQS na naslednji način:
1. Določanje roka za ponovne poskuse: Ko definirate metodo `retryUntil` v svojem razredu opravil, določite rok, do kdaj naj se ponovni poskusi posla nehajo izvajati. Ta rok se prenese v čakalno vrsto SQS kot parameter "VisibilityTimeout", ko je opravilo odposlano.
2. Obravnava ponovnih poskusov: Ko opravilo ne uspe, SQS naredi sporočilo nevidno za določeno trajanje "VisibilityTimeout", kar omogoči delavcu čakalne vrste Laravel, da znova poskusi obdelati opravilo. Če opravilo ponovno ne uspe v obdobju "VisibilityTimeout", bo SQS še naprej naredil sporočilo nevidno, kar bo omogočilo nadaljnje ponovne poskuse.
3. Doseči rok za ponovni poskus: Ko poteče obdobje »VisibilityTimeout« (kot je določeno z metodo `retryUntil`), bo SQS sporočilo znova naredil vidno in delavec čakalne vrste Laravel ne bo več poskušal obdelati služba. Na tej točki bo opravilo obravnavano kot "neuspešno" in ga je mogoče ustrezno obravnavati (npr. premakniti v čakalno vrsto mrtvih pisem).
4. Interakcija s konfiguracijami SQS: Pomembno je upoštevati, da lahko na vedenje metode `retryUntil` vpliva konfiguracija čakalne vrste SQS, kot sta nastavitvi »MessageRetentionPeriod« in »VisibilityTimeout«. Te konfiguracije na ravni SQS lahko preglasijo ali komunicirajo z metodo `retryUntil` v Laravelu.
Na primer, če je SQS "VisibilityTimeout" nastavljen na nižjo vrednost od roka `retryUntil`, bo opravilo morda ponovljeno večkrat, kot je bilo pričakovano. Nasprotno, če je »MessageRetentionPeriod« nastavljen na nižjo vrednost od roka `retryUntil`, bo opravilo morda odstranjeno iz čakalne vrste, preden je dosežen rok za ponovni poskus.
Da bi zagotovili, da metoda `retryUntil` deluje po pričakovanjih, je ključnega pomena, da konfiguracijo opravila Laravel uskladite s konfiguracijo čakalne vrste SQS, pri čemer upoštevate interakcije med temi nastavitvami.
Če povzamemo, metoda `retryUntil` v Laravelu sodeluje z AWS SQS tako, da nastavi parameter »VisibilityTimeout«, ki nadzoruje vedenje ponovnega poskusa opravila. Vendar pa na splošno vedenje vpliva tudi konfiguracija čakalne vrste SQS, zato je pomembno zagotoviti, da so te nastavitve pravilno poravnane.
Citati:[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