Para evitar que um trabalho desapareça da fila SQS após novas tentativas, você pode tentar as seguintes abordagens:
1. Aumentar o Limite Máximo de Recebimento no SQS:
- Por padrão, o SQS possui um limite de “Máximo de Recebimento”, que determina o número máximo de vezes que uma mensagem pode ser recebida da fila antes de ser movida para a Dead-Letter Queue (DLQ).
- Aumente o limite "Máximo de recebimentos" da sua fila SQS para um valor mais alto, como 10 ou 20, para permitir mais tentativas antes que o trabalho seja movido para o DLQ.
2. Desative a fila de mensagens mortas (DLQ):
- Se você não precisar da funcionalidade DLQ, poderá desativá-la para sua fila SQS. Isso impedirá que a tarefa seja movida para a fila de mensagens não entregues após o número máximo de novas tentativas.
- Para desativar o DLQ, você pode criar uma nova fila SQS sem um DLQ ou modificar a configuração da fila existente para remover o DLQ.
3. Aumente o tempo limite de visibilidade:
- O Visibility Timeout no SQS determina quanto tempo uma mensagem fica invisível para outros consumidores após ter sido recebida.
- Aumente o Tempo limite de visibilidade para um valor mais alto, como 1 hora ou 2 horas, para dar ao trabalho mais tempo para ser processado antes de ficar visível novamente para outra tentativa.
4. Implementar lógica de nova tentativa personalizada:
- Em vez de depender apenas do método `retryUntil`, você pode implementar uma lógica de repetição personalizada no método `handle` do seu trabalho.
- Isso pode envolver a verificação do número de tentativas e a liberação manual do trabalho de volta à fila com um atraso personalizado, em vez de deixar o sistema de fila lidar com as novas tentativas.
5. Use um driver de fila SQS personalizado:
- Conforme mencionado nas respostas anteriores, você pode criar um driver de fila SQS personalizado que estenda a classe `SqsQueue` padrão e adicione funcionalidade adicional para lidar com novas tentativas e evitar que os trabalhos desapareçam.
- Isso pode lhe dar mais controle sobre o comportamento de novas tentativas e garantir que os trabalhos não sejam perdidos ou removidos da fila prematuramente.
Ao implementar uma ou mais dessas abordagens, você pode evitar que seus trabalhos desapareçam da fila SQS após novas tentativas e garantir que eles sejam processados com êxito ou movidos para o DLQ conforme esperado.
Citações:[1] https://dev.to/ichtrojan/configurando-laravel-queues-with-aws-sqs-3f0n
[2] https://www.honeybadger.io/blog/laravel-queues-deep-dive/
[3] https://stackoverflow.com/questions/71411471/laravel-retryuntil-job-exits-after-4th-retry-without-failing
[4] https://laracasts.com/discuss/channels/laravel/queue-job-retry-after-x-minutos-if-failed
[5] https://github.com/shiftonelabs/laravel-sqs-fifo-queue