Udostępnij za pośrednictwem


Ponów próbę

DOTYCZY: Wszystkie warstwy usługi API Management

Zasady retry wykonują swoje zasady podrzędne raz, a następnie ponawiają próbę wykonania, dopóki ponawianie próby condition nie zostanie false wyczerpane lub ponów próbę count .

Uwaga

Ustaw elementy zasad i elementy podrzędne w kolejności podanej w instrukcji zasad. Dowiedz się więcej na temat ustawiania lub edytowania zasad usługi API Management.

Instrukcja zasad

<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>

Atrybuty

Atrybut opis Wymagani Wartość domyślna
condition Wartość logiczna. Określa, czy ponawianie prób powinno zostać zatrzymane (false) czy kontynuowane (true). Wyrażenia zasad są dozwolone. Tak Nie dotyczy
count Liczba dodatnia z zakresu od 1 do 50 określająca liczbę ponownych prób. Wyrażenia zasad są dozwolone. Tak Nie dotyczy
interval Liczba dodatnia w sekundach określająca interwał oczekiwania między próbami ponawiania prób. Wyrażenia zasad są dozwolone. Tak Nie dotyczy
maksymalny interwał Liczba dodatnia w sekundach określająca maksymalny interwał oczekiwania między próbami ponawiania. Służy do implementowania algorytmu ponawiania wykładniczego. Wyrażenia zasad są dozwolone. Nie. Nie dotyczy
delta Liczba dodatnia w sekundach określająca przyrost interwału oczekiwania. Służy do implementowania algorytmów ponawiania liniowego i wykładniczego. Wyrażenia zasad są dozwolone. Nie. Nie dotyczy
pierwsza szybka ponowna próba Wartość logiczna. Jeśli ustawiono truewartość , pierwsza próba ponawiania zostanie wykonana natychmiast. Wyrażenia zasad są dozwolone. Nie. false

Czas oczekiwania ponawiania prób

  • Gdy zostanie określony tylko parametr interval , są wykonywane próby o stałym interwale.

  • W przypadku określenia tylko wartości interval i używany jest algorytm ponawiania interwału liniowego.delta Czas oczekiwania między ponownymi próbami wzrasta zgodnie z następującą formułą: interval + (count - 1)*delta.

  • Po określeniu parametru intervali max-interval delta zostanie zastosowany algorytm ponawiania interwałów wykładniczych. Czas oczekiwania między ponownymi próbami zwiększa się wykładniczo zgodnie z następującą formułą: interval + (2^(count - 1)) * random(delta * 0.8, delta * 1.2), do maksymalnego interwału ustawionego przez max-intervalwartość .

    Na przykład gdy interval i delta są ustawione na 10 sekund i max-interval wynosi 100 sekund, przybliżony czas oczekiwania między ponownymi próbami wzrasta w następujący sposób: 10 sekund, 20 sekund, 40 sekund, 80 sekund, z 100 sekundami czasu oczekiwania używanym do pozostałych ponownych prób.

Elementy

Zasady retry mogą zawierać inne zasady jako elementy podrzędne.

Użycie

  • Sekcje zasad: ruch przychodzący, wychodzący, zaplecze, błąd
  • Zakresy zasad: globalny, obszar roboczy, produkt, interfejs API, operacja
  • Bramy: klasyczne, v2, zużycie, self-hosted, obszar roboczy

Przykłady

Przekazywanie żądań przy użyciu ponawiania wykładniczego

W poniższym przykładzie przekazywanie żądań jest ponawiane do dziesięciu razy przy użyciu algorytmu ponawiania wykładniczego. Ponieważ first-fast-retry jest ustawiona na falsewartość , wszystkie próby ponawiania są poddawane wykładniczo zwiększeniu czasów oczekiwania na ponawianie prób (w tym przykładzie około 10 sekund, 20 sekund, 40 sekund, ...), maksymalnie czekaj 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>

Wysyłanie żądania po początkowym niepowodzeniu żądania

W poniższym przykładzie wysłanie żądania do adresu URL innego niż zdefiniowane zaplecze jest ponawiane do trzech razy, jeśli połączenie zostało porzucone/przekroczone limit czasu, lub żądanie powoduje błąd po stronie serwera. Ponieważ first-fast-retry jest ustawiona wartość true, pierwsza ponowna próba jest wykonywana natychmiast po początkowym niepowodzeniu żądania. Należy pamiętać, że send-request musi mieć wartość ignore-error true, aby response-variable-name mieć wartość null w przypadku wystąpienia błędu.


<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>

Aby uzyskać więcej informacji na temat pracy z zasadami, zobacz: