O sistema de filas do Laravel lida com novas tentativas e falhas de jobs das seguintes maneiras:
Tentativas de trabalho
1. Repetições Configuráveis: você pode configurar tarefas para serem repetidas se falharem devido a erros temporários, aumentando a confiabilidade do sistema. Isso é feito definindo a propriedade `tries` na classe de trabalho[2][3].
2. Repetições Automáticas: O Laravel fornece novas tentativas automáticas para trabalhos com falha. Se um trabalho falhar, ele será repetido um determinado número de vezes antes de ser marcado como com falha[2][3].
3. Lógica de nova tentativa de trabalho: você pode definir um método `failed` na classe de trabalho para lidar com falhas de trabalho. Este método é chamado quando um trabalho falha e permite executar ações específicas do trabalho[3].
Falhas no trabalho
1. Tabela de jobs com falha: O Laravel armazena jobs com falha em uma tabela de banco de dados `failed_jobs`. Esta tabela contém informações sobre o ID do trabalho, conexão, fila e tempo de falha[3].
2. Visualizando trabalhos com falha: Você pode visualizar todos os trabalhos com falha usando o comando `queue:failed` do Artisan. Este comando lista o ID do trabalho, a conexão, a fila e o tempo de falha[3].
3. Repetindo trabalhos com falha: Você pode tentar novamente trabalhos com falha usando o comando `queue:retry` do Artisan. Este comando usa um ID de trabalho como argumento e tenta novamente o trabalho. Você também pode tentar novamente todos os trabalhos com falha usando `queue:retry all`[3][5].
4. Excluindo trabalhos com falha: Você pode excluir trabalhos com falha usando o comando `queue:forget` do Artisan. Este comando usa um ID de trabalho como argumento e exclui o trabalho. Você também pode excluir todos os trabalhos com falha usando `queue:flush`[3].
Conclusão
O sistema de filas do Laravel fornece mecanismos robustos para lidar com tentativas e falhas de jobs. Ao configurar novas tentativas, visualizar trabalhos com falha, tentar novamente trabalhos com falha e excluir trabalhos com falha, você pode garantir a confiabilidade e a eficiência de suas tarefas de processamento em segundo plano.
Citações:[1] https://laracasts.com/discuss/channels/laravel/laravel-queue-retry-jobs-5-times
[2] https://wpwebinfotech.com/blog/laravel-queue-system/
[3] https://laravel.com/docs/5.1/queues
[4] https://laracasts.com/discuss/channels/laravel/queue-job-retry-after-x-minutos-if-failed
[5] https://stackoverflow.com/questions/30778924/laravel-4-retry-all-failed-jobs