Tentar novamente uma operação com falha no Jitterbit Studio
Introdução
Falhas transitórias (como respostas de limite de taxa de API, breves tempos limite de rede ou indisponibilidade temporária de serviço) podem fazer com que uma operação saudável falhe intermitentemente. Em vez de deixar uma única falha interromper uma integração, um script controlador de repetição executa a operação automaticamente até um número configurado de vezes antes de gerar um erro final.
Este guia mostra como escrever um script controlador de repetição usando While, RunOperation, GetLastError e RaiseError.
Este guia pressupõe familiaridade com o uso de scripts para chamar operações. Para mais informações, consulte Encadear e controlar operações. Para considerações sobre a execução de RunOperation de forma assíncrona, consulte Gerenciar operações assíncronas.
Padrão de design
O padrão usa duas operações:
- Operação de destino: A operação que pode falhar transitoriamente, normalmente uma que chama uma API externa.
- Operação controladora: Uma única etapa de script que chama o destino usando
RunOperationdentro de um loopWhilecom um contador.
Três variáveis coordenam o loop:
maxRetries: o número total de tentativas a fazer antes de gerar um erro. Defina isso como o número máximo de vezes que a operação deve ser executada, incluindo a primeira tentativa.attempt: a contagem de tentativa atual, inicializada como0e incrementada no início de cada iteração do loop.success: um sinalizador inicializado comofalsee definido comotruequandoRunOperationé bem-sucedido, o que sai do loop antecipadamente.
Parte 1: Configurar a operação de destino
A operação de destino pode ser qualquer operação: um GET HTTP v2, uma consulta de conector ou uma cadeia de transformação. O único requisito é que ela exista como uma operação nomeada na tela de design para que RunOperation possa chamá-la por tag.
Se a operação já estiver na tela como uma operação independente, nenhuma alteração será necessária. Se estiver atualmente embutida em uma cadeia maior, mova-a para sua própria operação para que possa ser chamada independentemente.
Parte 2: Escrever o script controlador de repetição
-
Na tela de design, crie uma nova operação contendo apenas uma etapa de Script.
-
Clique duas vezes no script para abrir o editor e digite o seguinte:
$maxRetries = 3; $attempt = 0; $success = false; While(!$success && $attempt < $maxRetries, $attempt++; If(RunOperation("<TAG>operation:Call External API</TAG>"), $success = true; , WriteToOperationLog("Attempt " + $attempt + " of " + $maxRetries + " failed: " + GetLastError()); ); ); If(!$success, RaiseError("Operation failed after " + $maxRetries + " attempts: " + GetLastError()); );Substitua
Call External APIpelo nome exato da operação de destino. -
Salve o script.
Pontos-chave sobre este script:
$maxRetries = 3significa 3 tentativas totais. Ajuste este valor de acordo com as características de confiabilidade do endpoint de destino.- O loop sai assim que
RunOperationretornatrue(sucesso) ou apósmaxRetriestentativas terem sido feitas, o que vier primeiro. WriteToOperationLogregistra cada tentativa com falha no log de operação, facilitando a visualização de quantas repetições ocorreram antes do sucesso ou falha final.RaiseError(GetLastError())interrompe a operação controladora e exibe a última mensagem de erro após todas as tentativas serem esgotadas.RunOperationé síncrono por padrão, portanto o loop aguarda a conclusão de cada tentativa antes de avaliar a próxima iteração.RunOperationtambém está sujeito a um limite de nível de agente em chamadas síncronas feitas dentro de um único loopWhile(50por padrão). Isso está bem acima de qualquer valor típico demaxRetries, mas se você configurar uma contagem de repetição incomumente alta, consulte a nota emRunOperationpara obter detalhes.
Dica
APIs com limite de taxa: Se tentar novamente após uma resposta de limite de taxa (HTTP 429), adicione uma chamada Sleep antes de RunOperation para pausar entre tentativas (por exemplo, Sleep(2) aguarda 2 segundos). Tentar novamente imediatamente atingirá o mesmo limite de taxa repetidamente e estenderá a janela de falha.
Dica
Para limitar o número de iterações de loop permitidas, defina $jitterbit.scripting.while.max_iterations antes da chamada While. O limite padrão é 50.000 iterações, bem acima de qualquer contagem de tentativas prática, portanto isso só é necessário se você tiver configurado um limite global menor em outro lugar do projeto.
Verificar a integração
Implante e execute a operação do controlador. Verifique os logs da operação: cada tentativa falhada aparece como uma entrada de log separada. Se todas as tentativas falharem, o log mostra uma entrada por tentativa seguida pelo erro final gerado. Se a operação for bem-sucedida em uma tentativa anterior, apenas as falhas até esse ponto aparecem.
Para testar o comportamento de repetição antes de executar em um endpoint ativo, configure temporariamente a operação de destino para falhar (por exemplo, inserindo uma URL inválida na conexão) e defina $maxRetries = 2. O log deve mostrar duas tentativas falhadas e um erro final gerado. Restaure a configuração correta antes de implantar em produção.