O método `retryUntil` no Laravel interage com o AWS SQS da seguinte maneira:
1. Especificando um prazo para novas tentativas: Ao definir o método `retryUntil` em sua classe de trabalho, você está especificando um prazo para quando o trabalho deve parar de ser repetido. Este prazo é passado para a fila do SQS como parâmetro "VisibilityTimeout" quando o job é despachado.
2. Tratamento de novas tentativas: Quando um trabalho falha, o SQS tornará a mensagem invisível pela duração "VisibilityTimeout" especificada, permitindo que o trabalhador da fila do Laravel tente processar o trabalho novamente. Se o trabalho falhar novamente dentro do período "VisibilityTimeout", o SQS continuará a tornar a mensagem invisível, permitindo novas tentativas.
3. Atingindo o prazo de nova tentativa: Depois que o período "VisibilityTimeout" (conforme especificado pelo método `retryUntil`) tiver decorrido, o SQS tornará a mensagem visível novamente e o trabalhador da fila do Laravel não tentará mais processar o trabalho. Neste ponto, o trabalho será considerado "com falha" e poderá ser tratado adequadamente (por exemplo, movido para uma fila de mensagens não entregues).
4. Interação com configurações SQS: É importante observar que o comportamento do método `retryUntil` pode ser afetado pela configuração da fila SQS, como as configurações "MessageRetentionPeriod" e "VisibilityTimeout". Essas configurações de nível SQS podem substituir ou interagir com o método `retryUntil` no Laravel.
Por exemplo, se o "VisibilityTimeout" do SQS for definido com um valor inferior ao prazo `retryUntil`, o trabalho poderá ser repetido mais vezes do que o esperado. Por outro lado, se "MessageRetentionPeriod" for definido com um valor inferior ao prazo `retryUntil`, o trabalho poderá ser removido da fila antes que o prazo de nova tentativa seja atingido.
Para garantir que o método `retryUntil` funcione conforme o esperado, é crucial alinhar a configuração do trabalho Laravel com a configuração da fila SQS, levando em consideração as interações entre essas configurações.
Em resumo, o método `retryUntil` no Laravel interage com o AWS SQS definindo o parâmetro "VisibilityTimeout", que controla o comportamento de nova tentativa do trabalho. No entanto, o comportamento geral também é influenciado pela configuração da fila SQS e é importante garantir que essas configurações estejam devidamente alinhadas.
Citações:[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-minutos-if-failed