Metoda `retryUntil` v Laravelu spolupracuje s AWS SQS následujícím způsobem:
1. Určení termínu opakování: Když ve své třídě úloh definujete metodu `retryUntil`, zadáváte termín, kdy se má úloha přestat opakovat. Tento termín je předán do fronty SQS jako parametr "VisibilityTimeout" při odeslání úlohy.
2. Zpracování opakování: Když úloha selže, SQS zprávu zneviditelní po zadanou dobu „VisibilityTimeout“, což umožní pracovníkovi fronty Laravel pokusit se úlohu znovu zpracovat. Pokud se úloha znovu nezdaří během období „VisibilityTimeout“, SQS bude zprávu i nadále zneviditelnit, což umožní další opakování.
3. Dosažení termínu opakování: Jakmile uplyne doba „VisibilityTimeout“ (jak je specifikováno metodou „retryUntil“), SQS zprávu znovu zviditelní a pracovník fronty Laravel se již nebude pokoušet zprávu zpracovat. práce. V tomto okamžiku bude úloha považována za „neúspěšnou“ a lze ji odpovídajícím způsobem zpracovat (např. přesunout do fronty nedoručených zpráv).
4. Interakce s konfiguracemi SQS: Je důležité si uvědomit, že chování metody `retryUntil` může být ovlivněno konfigurací fronty SQS, jako je nastavení „MessageRetentionPeriod“ a „VisibilityTimeout“. Tyto konfigurace na úrovni SQS mohou přepsat nebo interagovat s metodou `retryUntil` v Laravelu.
Pokud je například SQS "VisibilityTimeout" nastavena na nižší hodnotu, než je termín `retryUntil`, může se úloha opakovat vícekrát, než se očekávalo. Naopak, pokud je "MessageRetentionPeriod" nastavena na nižší hodnotu než termín `retryUntil`, může být úloha odstraněna z fronty před dosažením termínu opakování.
Aby metoda `retryUntil` fungovala podle očekávání, je důležité sladit konfiguraci úlohy Laravel s konfigurací fronty SQS a vzít v úvahu interakce mezi těmito nastaveními.
Stručně řečeno, metoda `retryUntil` v Laravelu spolupracuje s AWS SQS nastavením parametru „VisibilityTimeout“, který řídí chování opakování úlohy. Celkové chování je však také ovlivněno konfigurací fronty SQS a je důležité zajistit, aby tato nastavení byla správně zarovnána.
Citace:[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