Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
UYGULANANLAR: Tüm API Management katmanları
İlkeretry, alt ilkelerini bir kez yürütür ve sonra yeniden deneme bitene condition veya yeniden denenene false kadar yürütmelerini yeniden denercount.
İlke retry , ilke dışında wait alt öğeleri olarak başka ilkeler içerebilir.
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. |
Evet | Yok |
| sayı | Denenecek yeniden deneme sayısını belirten 1 ile 50 arasında pozitif bir sayı. İlke ifadelerine izin verilir. | Evet | Yok |
| aralık | Yeniden deneme girişimleri arasındaki bekleme aralığını belirten saniye cinsinden pozitif bir sayı. İlke ifadelerine izin verilir. | Evet | 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
intervalbelirtildiğindedeltadoğ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
intervalbelirtildiğindemax-intervaldelta, ü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-intervalayarlanan maksimum aralığa kadar.Örneğin,
intervalherdeltaikisi de 10 saniye vemax-interval100 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 , ilke dışında wait 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ı
Kullanım notları
- İlke, alt ilkeleri ilk yeniden deneme girişimini
retryyürütmek üzere değerlendirmedenconditionönce bloğunda yürütür.
Ö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-intervalsü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 ignore-error true olarak ayarlanması response-variable-name 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>
Hata alındığında arka uça geçme
Aşağıdaki örnekte, ilk istek birincil arka uça gönderilir. Yanıt 429 Too Many Requests durum kodu döndürülürse istek hemen yeniden denenip ikincil arka uça iletilir.
<backend>
<retry
condition="@(context.Response != null && context.Response.StatusCode == 429)"
count="1"
interval="1"
first-fast-retry="true">
<set-variable name="attempt-count" value="@(context.Variables.GetValueOrDefault<int>("attempt-count", 0)+1)" />
<set-backend-service backend-id="@(context.Variables.GetValueOrDefault<int>("attempt-count") < 2 ? "primary-backend" : "secondary-backend" )" />
<forward-request />
</retry>
</backend>
Tip
Alternatif olarak, hata koşullarını algılamak için devre kesici kurallarıyla bir arka uç kaynağı ve istekleri birden çok arka uç arasında dağıtan yük dengeli bir havuz yapılandırabilirsiniz.
İ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
- İlke oyun alanı deposu
- Azure API Management ilke araç seti
- Politikalar oluşturmak, açıklamak ve sorun gidermek için Copilot yardımı alın