Metoda `retryUntil` w Laravel współdziała z AWS SQS w następujący sposób:
1. Określanie terminu ponownej próby: Kiedy definiujesz metodę `retryUntil` w swojej klasie stanowiska, określasz ostateczny termin, w którym zadanie powinno przestać być ponawiane. Termin ten jest przekazywany do kolejki SQS jako parametr „VisibilityTimeout” podczas wysyłania zadania.
2. Ponowne próby obsługi: Gdy zadanie się nie powiedzie, SQS sprawi, że wiadomość stanie się niewidoczna przez określony czas „VisibilityTimeout”, umożliwiając procesowi roboczemu kolejki Laravel ponowną próbę przetworzenia zadania. Jeśli zadanie ponownie zakończy się niepowodzeniem w okresie „VisibilityTimeout”, SQS będzie nadal czynić wiadomość niewidoczną, umożliwiając dalsze próby.
3. Osiągnięcie terminu ponownej próby: Po upływie okresu „VisibilityTimeout” (określonego metodą „retryUntil”), SQS sprawi, że wiadomość będzie ponownie widoczna, a proces roboczy kolejki Laravel nie będzie już próbował przetwarzać stanowisko. W tym momencie zadanie zostanie uznane za „nieudane” i może zostać odpowiednio obsłużone (np. przeniesione do kolejki niedostarczonych wiadomości).
4. Interakcja z konfiguracjami SQS: Należy zauważyć, że na zachowanie metody `retryUntil` może mieć wpływ konfiguracja kolejki SQS, taka jak ustawienia „MessageRetentionPeriod” i „VisibilityTimeout”. Te konfiguracje na poziomie SQS mogą zastąpić metodę „retryUntil” w Laravel lub wchodzić z nią w interakcję.
Na przykład, jeśli SQS „VisibilityTimeout” jest ustawiony na niższą wartość niż ostateczny termin „retryUntil”, zadanie może być ponawiane częściej niż oczekiwano. I odwrotnie, jeśli parametr „MessageRetentionPeriod” jest ustawiony na niższą wartość niż termin ostateczny „retryUntil”, zadanie może zostać usunięte z kolejki przed upływem terminu ponownej próby.
Aby mieć pewność, że metoda `retryUntil` działa zgodnie z oczekiwaniami, ważne jest, aby dopasować konfigurację zadania Laravel do konfiguracji kolejki SQS, biorąc pod uwagę interakcje pomiędzy tymi ustawieniami.
Podsumowując, metoda `retryUntil` w Laravel współdziała z AWS SQS poprzez ustawienie parametru „VisibilityTimeout”, który kontroluje zachowanie ponawiania zadania. Jednakże na ogólne zachowanie wpływa również konfiguracja kolejki SQS i ważne jest, aby upewnić się, że te ustawienia są odpowiednio dopasowane.
Cytaty:[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-minuty-if-failed