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 intervalointerval
serão realizadas.Quando apenas
interval
edelta
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
edelta
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 pormax-interval
.Por exemplo, quando
interval
edelta
são definidos como 10 segundos emax-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
- Seções da política: entrada, saída, back-end, em caso de erro
- Escopos de política: global, espaço de trabalho, produto, API, operação
- Gateways: clássico, v2, consumo, auto-hospedado, espaço de trabalho
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>
Políticas relacionadas
Conteúdo relacionado
Para obter mais informações sobre como trabalhar com políticas, consulte:
- Tutorial: Transformar e proteger sua API
- Referência de Política para uma lista completa das instruções de política e suas configurações
- Expressões de política
- Definir ou editar políticas
- Reutilizar configurações de política
- Repositório de snippets de política
- Criar políticas usando o Microsoft Copilot no Azure