Ir para o conteúdo

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 RunOperation dentro de um loop While com 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 como 0 e incrementada no início de cada iteração do loop.
  • success: um sinalizador inicializado como false e definido como true quando RunOperation é 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

  1. Na tela de design, crie uma nova operação contendo apenas uma etapa de Script.

  2. 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 API pelo nome exato da operação de destino.

  3. Salve o script.

Pontos-chave sobre este script:

  • $maxRetries = 3 significa 3 tentativas totais. Ajuste este valor de acordo com as características de confiabilidade do endpoint de destino.
  • O loop sai assim que RunOperation retorna true (sucesso) ou após maxRetries tentativas terem sido feitas, o que vier primeiro.
  • WriteToOperationLog registra 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.
  • RunOperation também está sujeito a um limite de nível de agente em chamadas síncronas feitas dentro de um único loop While (50 por padrão). Isso está bem acima de qualquer valor típico de maxRetries, mas se você configurar uma contagem de repetição incomumente alta, consulte a nota em RunOperation para 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.