Yeniden Dene
UYGULANANLAR: Tüm API Management katmanları
İlkeretry
, alt ilkelerini bir kez yürütür ve sonra yeniden deneme bitene false
veya yeniden denenene condition
kadar yürütmelerini yeniden denercount
.
Not
İlkenin öğelerini ve alt öğelerini ilke bildiriminde sağlanan sırayla ayarlayın. API Management ilkelerini ayarlama veya düzenleme hakkında daha fazla bilgi edinin.
İlke bildirimi
<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>
Özellikler
Öznitelik | Açıklama | Zorunlu | Varsayılan |
---|---|---|---|
koşul | Boole. Yeniden denemelerin durdurulması (false ) veya devam etmesi (true ) gerekip gerekmediğini belirtir. İlke ifadelerine izin verilir. |
Yes | Yok |
count | Denenecek yeniden deneme sayısını belirten 1 ile 50 arasında pozitif bir sayı. İlke ifadelerine izin verilir. | Yes | Yok |
interval | Yeniden deneme girişimleri arasındaki bekleme aralığını belirten saniye cinsinden pozitif bir sayı. İlke ifadelerine izin verilir. | Yes | Yok |
maksimum aralık | Yeniden deneme denemeleri arasındaki maksimum bekleme aralığını belirten saniye cinsinden pozitif bir sayı. Üstel bir yeniden deneme algoritması uygulamak için kullanılır. İlke ifadelerine izin verilir. | Hayır | YOK |
delta | Bekleme aralığı artışını belirten saniye cinsinden pozitif bir sayı. Doğrusal ve üstel yeniden deneme algoritmalarını uygulamak için kullanılır. İlke ifadelerine izin verilir. | Hayır | YOK |
ilk hızlı yeniden deneme | Boole. olarak ayarlanırsa true , ilk yeniden deneme girişimi hemen gerçekleştirilir. İlke ifadelerine izin verilir. |
Hayır | false |
Bekleme sürelerini yeniden deneyin
Yalnızca belirtildiğinde
interval
, sabit aralıklı yeniden denemeler gerçekleştirilir.Yalnızca ve
delta
belirtildiğindeinterval
doğrusal aralık yeniden deneme algoritması kullanılır. Yeniden denemeler arasındaki bekleme süresi aşağıdaki formüle göre artar:interval + (count - 1)*delta
.ve
delta
belirtildiğindemax-interval
interval
, üstel aralık yeniden deneme algoritması uygulanır. Yeniden denemeler arasındaki bekleme süresi, şu formüle göre katlanarak artar:interval + (2^(count - 1)) * random(delta * 0.8, delta * 1.2)
, tarafındanmax-interval
ayarlanan maksimum aralığa kadar.Örneğin,
interval
herdelta
ikisi de 10 saniye vemax-interval
100 saniye olarak ayarlandığında, yeniden denemeler arasındaki yaklaşık bekleme süresi şu şekilde artar: 10 saniye, 20 saniye, 40 saniye, 80 saniye, kalan yeniden denemeler için 100 saniye bekleme süresi kullanılır.
Öğeler
İlke, retry
alt öğeleri olarak başka ilkeler içerebilir.
Kullanım
- İlke bölümleri: gelen, giden, arka uç, hatada
- İlke kapsamları: genel, çalışma alanı, ürün, API, işlem
- Ağ geçitleri: klasik, v2, tüketim, şirket içinde barındırılan, çalışma alanı
Örnekler
Üstel yeniden deneme ile istek iletme
Aşağıdaki örnekte, üstel bir yeniden deneme algoritması kullanılarak istek iletme on kereye kadar yeniden denendi.
first-fast-retry
olarak ayarlandığındanfalse
, tüm yeniden deneme denemeleri üstel olarak artan yeniden deneme bekleme sürelerine (bu örnekte, yaklaşık 10 saniye, 20 saniye, 40 saniye, ...) en fazla bekleme max-interval
süresine tabidir.
<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>
İlk istek hatasından sonra istek gönderme
Aşağıdaki örnekte, bağlantı bırakıldığında/zaman aşımına uğradıysa veya istek sunucu tarafı hatasıyla sonuçlanırsa, tanımlanan arka uç dışındaki bir URL'ye istek gönderme işlemi üç kez yeniden denenecek.
first-fast-retry
true olarak ayarlandığından, ilk yeniden deneme ilk istek hatasından hemen sonra yürütülür.
send-request
Hata durumunda null olması için response-variable-name
true olarak ayarlanması ignore-error
gerektiğini unutmayın.
<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>
İlgili ilkeler
İlgili içerik
İlkelerle çalışma hakkında daha fazla bilgi için bkz:
- Öğretici: API'nizi dönüştürme ve koruma
- İlke deyimlerinin ve ayarlarının tam listesi için ilke başvurusu
- İlke ifadeleri
- İlkeleri ayarlama veya düzenleme
- İlke yapılandırmalarını yeniden kullanma
- İlke kod parçacıkları deposu
- Azure API Management ilke araç seti
- Azure'da Microsoft Copilot kullanarak ilke yazma