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ğinde interval 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ğinde max-intervalinterval, ü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ından max-intervalayarlanan maksimum aralığa kadar.

    Örneğin, interval her delta ikisi de 10 saniye ve max-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

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

İlkelerle çalışma hakkında daha fazla bilgi için bkz: