O método de repetição em Laravel é usado principalmente em trabalhos na fila para controlar quanto tempo um trabalho deve continuar sendo julgado antes de desistir. Ele especifica o tempo de tempo limite, após o qual o trabalhador deixará de tentar reprocisar esse trabalho, independentemente do número de tentativas feitas. Este método retorna uma instância do DateTime que indica o tempo de corte absoluto para tentar novamente um trabalho.
Os casos de uso comuns para o método de repetição em Laravel incluem:
Trabalho de limitação e limite de taxa:
- Ao interagir com APIs externas que aplicam os limites da taxa (por exemplo, máximo de 10 solicitações por minuto), os trabalhos podem ser julgados repetidamente, mas apenas até um prazo específico. O uso de repetição ajuda a fazer cumprir um período máximo de tentativa (por exemplo, uma hora ou 24 horas) para evitar loops de tentativa indefinidos que possam inundar a fila.
- Essa abordagem é útil quando os trabalhos falham devido à limitação temporária da taxa ou estrangulamento imposto por serviços de terceiros e precisam ser julgados várias vezes, mas não para sempre.
Tentativas baseadas no tempo em vez de baseadas em contagem:
- O APRYYUNTIL pode ser usado como uma alternativa à propriedade $ TENTES, que define o número máximo de tentativas de repetição para um trabalho.
- Em vez de limitar as tentativas de repetição por número, os limites de repetição do tempo. O trabalho voltará a tentar o maior número de vezes possível até o prazo especificado.
- Isso pode ser útil quando é difícil estimar quantas tentativas podem ser necessárias e quando a restrição de tempo for mais importante que a contagem exata da tentativa.
Lidar com operações de probabilidade de alta falha:
- Para operações como o envio de solicitações HTTP para APIs instáveis de terceiros, que podem falhar esporadicamente, o Retyuntil permite que o trabalho continue tentando, mas apenas dentro de uma janela de tempo limite sensata.
- Isso reduz o risco de os empregos serem abandonados muito cedo, além de garantir que eles não voltem a tentar desperdiçar para sempre os recursos.
Degradação graciosa com tempos limite:
- Se os trabalhos envolverem operações longas ou dependências a jusante que possam tempo limite ou desacelerar temporariamente, a definição de repetições permite que o desenvolvedor defina um limite global de tempo limite além do qual a nova tentativa do trabalho se torna inútil.
- Isso ajuda a manter a fila em movimento e impede que os empregos presos ou lentos bloqueem os recursos indefinidamente.
Combinando o Reiluntil com o Middleware Job:
- Representimento é útil quando combinado com o middleware do trabalho, como limitação de taxa ou middleware de aceleração, que controla a taxa de processamento da fila de tarefas.
- Por exemplo, ao enviar milhares de trabalhos limitados a uma certa taxa de transferência, o Retyuntil pode definir a vida útil do trabalho. Se um trabalho for repetidamente acelerado e requedido, ele acabará por parar de tentar novamente após o tempo de repetição, evitando um ciclo de repetição infinita.
- Esse padrão ajuda a distinguir entre falhas genuínas e trabalhos que são simplesmente atrasados devido a limites de taxa.
Lógica de repetição personalizada:
- Às vezes, os desenvolvedores usam o reproyuntil para implementar estratégias de repetição personalizadas. Por exemplo, pode -se adicionar lógica dentro do método para estender ou reduzir os tempos de tentativa dinamicamente com base em condições externas, como carga do sistema ou status da API.
- Isso adiciona flexibilidade ao mecanismo de tentativa além de um número fixo de tentativas ou tempo limite fixo.
Distinguindo entre falhas e tentativas:
- O ATRYRYuntil pode ajudar a limpar os logs de erros, impedindo tentativas excessivamente agressivas de trabalhos que continuam falhando, mas estão dentro da janela da tentativa.
- Os desenvolvedores podem implementar o método Try/Catch dentro do trabalho e falharem explicitamente se uma exceção não recuperável ocorrer antes do tempo limite da repetição.
- Isso permite que os trabalhos reconectados continuem novamente repetindo até o tempo limite, enquanto os trabalhos fracassados param imediatamente, melhorando a clareza dos estados do fracasso.
Tempo limite para empregos com taxa limitada:
- Os trabalhos que são liberados de volta à fila devido a chamadas limitantes da taxa aumentarão a tentativa de contagem, para que o Refryuntil possa atuar como um cronômetro à prova de falhas.
- Quando os trabalhos limitados da taxa continuarem sendo liberados e se repetiram, o Refriyuntil garante que eles não voltem além de um período de tempo limite definido.
Exemplos práticos:
- Um e -mail enviando trabalho que experimenta a cada 5 minutos, mas para de tentar novamente após 1 hora.
- Um trabalho de processamento de pagamento que continua novamente novamente, se os gateways de pagamento externo responderem com erros ou tempo limite.
- Trabalhos de integração da API que tentam novamente por 24 horas, respeitando os limites da taxa de API e as notas temporárias.
A documentação da fila de Laravel destaca o Repryuntil como uma maneira de especificar o tempo máximo que um trabalho deve ser julgado. Ele substitui a propriedade $ tenta se existem ambos. Os desenvolvedores definem o retroduntil para devolver um atual registro de data e hora além do qual Laravel não tentará mais o trabalho.
Apesar de sua utilidade, alguns desenvolvedores observam as limitações do comportamento de repetição, como serem ignoradas nos cenários de encadeamento de empregos ou desaparecimento inesperado de empregos de filas se as condições de repetição não forem atendidas. Além disso, o método de repetição não lida diretamente como lógica, como incrementar as tentativas ou exceções de captura, que devem ser tratadas dentro do método de manipulação do trabalho ou por middleware adicional.
Em resumo, o Apresentimento é um método poderoso em Laravel para controlar a vida útil da tentativa de emprego na fila com base no tempo, em vez de número de tentativas. É comumente usado para repetir trabalhos que interagem com APIs limitadas por taxa, operações com alta probabilidade de falha e para aplicar tempo limite gracioso da tentativa, melhorando assim a robustez e o controle do sistema de processamento de filas de Laravel.