Tentar novamente

APLICA-SE A: todas as camadas do Gerenciamento de API

A política retry executa suas políticas filho uma vez e tenta realizar sua execução novamente até condition da nova tentativa se tornar false ou count da nova tentativa ser esgotada.

Observação

Defina os elementos da política e os elementos filho na ordem fornecida na declaração da política. Saiba mais sobre como definir e editar as políticas de Gerenciamento de API.

Declaração de política

<retry
    condition="Boolean expression or literal"
    count="number of retry attempts"
    interval="retry interval in seconds"
    max-interval="maximum retry interval in seconds"
    delta="retry interval delta in seconds"
    first-fast-retry="boolean expression or literal">
        <!-- One or more child policies. No restrictions. -->
</retry>

Atributos

Atributo Descrição Obrigatório Padrão
condition Booliano. Especifica se as novas tentativas devem ser interrompidas (false) ou continuadas (true). Expressões de política são permitidas. Sim N/D
count Um número positivo entre 1 e 50 que especifica o número de novas tentativas. Expressões de política são permitidas. Sim N/D
intervalo Um número positivo, em segundos, que especifica o intervalo de espera entre as novas tentativas. Expressões de política são permitidas. Sim N/D
max-interval Um número positivo, em segundos, que especifica o intervalo de espera máximo entre as novas tentativas. Ele é usado para implementar um algoritmo de nova tentativa exponencial. Expressões de política são permitidas. No N/D
delta Um número positivo, em segundos, que especifica o incremento do intervalo de espera. Ele é usado para implementar algoritmos de nova tentativa exponenciais e lineares. Expressões de política são permitidas. No N/D
first-fast-retry Booliano. Se definido como true, a primeira nova tentativa será executada imediatamente. Expressões de política são permitidas. Não false

Tempos de espera de repetição

  • Quando apenas interval for especificado, novas tentativas de intervalo interval serão realizadas.

  • Quando apenas interval e delta são especificados, um algoritmo de repetição com intervalo linear é usado. O tempo de espera entre as repetições aumenta de acordo com a seguinte fórmula: interval + (count - 1)*delta.

  • Quando interval, max-interval e delta são especificados, um algoritmo repetição com intervalo exponencial é aplicado. O tempo de espera entre as repetições aumenta exponencialmente de acordo com a seguinte fórmula: interval + (2^count - 1) * random(delta * 0.8, delta * 1.2), até um intervalo máximo definido por max-interval.

    Por exemplo, quando interval e delta são definidos como 10 segundos e max-interval é de 100 segundos, o tempo de espera aproximado entre as repetições aumenta da seguinte maneira: 10 segundos, 20 segundos, 40 segundos, 80 segundos, com 100 segundos de tempo de espera usado para repetições restantes.

Elementos

A política retry pode conter quaisquer outras políticas como seus elementos filho.

Uso

Exemplos

Encaminhamento de solicitações com repetição exponencial

No exemplo a seguir o encaminhamento de solicitação será repetido até dez vezes usando o algoritmo de nova tentativa exponencial. Como first-fast-retry está definido como false, todas as tentativas de repetição estão sujeitas a aumentar exponencialmente os tempos de espera da repetição (neste exemplo, aproximadamente 10 segundos, 20 segundos, 40 segundos...) até uma espera máxima de max-interval.

<retry
    condition="@(context.Response.StatusCode == 500)"
    count="10"
    interval="10"
    max-interval="100"
    delta="10"
    first-fast-retry="false">
        <forward-request buffer-request-body="true" />
</retry>

Enviar solicitação após falha de solicitação inicial

No exemplo a seguir, o envio de uma solicitação para uma URL diferente do back-end definido será repetido até três vezes se a conexão for descartada/cronometrada ou a solicitação resultar em um erro do lado do servidor. Como first-fast-retry é definido como true, a primeira repetição é executada imediatamente após a falha da solicitação inicial. Observe que send-request deve definir ignore-error como true para response-variable-name ser nulo no caso de um erro.


<retry
    condition="@(context.Variables["response"] == null || ((IResponse)context.Variables["response"]).StatusCode >= 500)"
    count="3"
    interval="1"
    first-fast-retry="true">
        <send-request 
            mode="new" 
            response-variable-name="response" 
            timeout="3" 
            ignore-error="true">
		        <set-url>https://api.contoso.com/products/5</set-url>
		        <set-method>GET</set-method>
		</send-request>
</retry>

Para obter mais informações sobre como trabalhar com políticas, consulte: