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 true wartość , 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
interval
imax-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 przezmax-interval
wartość .Na przykład gdy
interval
idelta
są ustawione na 10 sekund imax-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 false
wartość , 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>
Powiązane zasady
Powiązana zawartość
Aby uzyskać więcej informacji na temat pracy z zasadami, zobacz:
- Samouczek: przekształcanie i ochrona interfejsu API
- Dokumentacja zasad dla pełnej listy instrukcji zasad i ich ustawień
- Wyrażenia zasad
- Ustawianie lub edytowanie zasad
- Ponowne używanie konfiguracji zasad
- Repozytorium fragmentów zasad
- Tworzenie zasad przy użyciu rozwiązania Microsoft Copilot na platformie Azure