Metóda `retryUntil` v Laravel interaguje s AWS SQS nasledujúcim spôsobom:
1. Určenie termínu opätovného pokusu: Keď definujete metódu `retryUntil` vo svojej triede úloh, zadávate konečný termín, kedy sa má úloha prestať opakovať. Tento termín sa odošle do frontu SQS ako parameter "VisibilityTimeout" pri odoslaní úlohy.
2. Spracovanie opakovaných pokusov: Keď úloha zlyhá, SQS spraví správu neviditeľnou počas určeného trvania "VisibilityTimeout", čo umožní pracovníkovi frontu Laravel pokúsiť sa znova spracovať úlohu. Ak úloha znova zlyhá počas obdobia „VisibilityTimeout“, SQS bude správu naďalej neviditeľné, čo umožní ďalšie pokusy.
3. Dosiahnutie termínu opätovného pokusu: Po uplynutí doby „VisibilityTimeout“ (určenej metódou „retryUntil“) SQS správu znova zviditeľní a pracovník frontu Laravel sa už nebude pokúšať spracovať prácu. V tomto bode sa úloha bude považovať za „neúspešnú“ a môže sa s ňou primerane zaobchádzať (napr. presunutá do frontu nedoručených správ).
4. Interakcia s konfiguráciami SQS: Je dôležité poznamenať, že správanie metódy `retryUntil` môže byť ovplyvnené konfiguráciou frontu SQS, ako sú nastavenia „MessageRetentionPeriod“ a „VisibilityTimeout“. Tieto konfigurácie na úrovni SQS môžu prepísať alebo interagovať s metódou `retryUntil` v Laravel.
Napríklad, ak je SQS "VisibilityTimeout" nastavený na nižšiu hodnotu, než je termín `retryUntil`, úloha sa môže opakovať viackrát, ako sa očakávalo. Naopak, ak je „MessageRetentionPeriod“ nastavené na nižšiu hodnotu, než je termín „retryUntil“, úloha môže byť odstránená z frontu pred dosiahnutím termínu opätovného pokusu.
Aby metóda `retryUntil` fungovala podľa očakávania, je dôležité zosúladiť konfiguráciu úlohy Laravel s konfiguráciou frontu SQS, berúc do úvahy interakcie medzi týmito nastaveniami.
Stručne povedané, metóda `retryUntil` v Laravel interaguje s AWS SQS nastavením parametra „VisibilityTimeout“, ktorý riadi správanie opakovania úlohy. Celkové správanie je však ovplyvnené aj konfiguráciou frontu SQS a je dôležité zabezpečiť, aby boli tieto nastavenia správne zarovnané.
Citácie:[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