إعادة المحاولة

ينطبق على: جميع مستويات إدارة واجهة برمجة التطبيقات

ينفذ النهج retry نُهجه الفرعية مرة واحدة ثم يعيد محاولة تنفيذها حتىcondition تصبح falseأو تُستنفدcountإعادة المحاولة.

إشعار

تعيين عناصر النهج والعناصر التابعة بالترتيب الوارد في بيان النهج. تعلم كيفية إعداد نُهج APIM أو تعديلها.

نهج السياسة

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

سمات

السمة ‏‏الوصف مطلوبة افتراضي
condition منطقي. يحدد ما إذا كان يجب إيقاف عمليات إعادة المحاولة (false) أو المتابعة (true). يتم السماح بتعبيرات النهج. ‏‏نعم‬ غير متوفر
عدد رقم موجب بين 1 و50 يحدد عدد مرات إعادة المحاولة. يتم السماح بتعبيرات النهج. ‏‏نعم‬ غير متوفر
الفاصل الزمني رقم موجب بالثواني يحدد فترة الانتظار بين مرات إعادة المحاولة. يتم السماح بتعبيرات النهج. ‏‏نعم‬ غير متوفر
الفاصل الزمني الأقصى رقم موجب بالثواني يحدد أقصى فترة انتظار بين مرات إعادة المحاولة. يتم استخدامه لتنفيذ خوارزمية إعادة محاولة أسية. يتم السماح بتعبيرات النهج. لا ‏‫غير متاح
delta رقم موجب بالثواني يحدد زيادة الفاصل الزمني للانتظار. يتم استخدامه لتنفيذ خوارزميات إعادة المحاولة الخطية والأسية. يتم السماح بتعبيرات النهج. لا ‏‫غير متاح
إعادة المحاولة السريعة الأولى منطقي. إذا تم التعيين على true، يتم تنفيذ محاولة إعادة المحاولة الأولى على الفور. يتم السماح بتعبيرات النهج. لا false

إعادة محاولة أوقات الانتظار

  • عندما يتم تحديد interval فقط، يتم تنفيذ إعادة المحاولة بفاصل زمني ثابت.

  • عند تحديد interval و delta فقط، يتم استخدام خوارزمية إعادة محاولة الفاصل الزمني الخطي. يزيد وقت الانتظار بين عمليات إعادة المحاولة وفقاً للصيغة التالية: interval + (count - 1)*delta.

  • عند تحديد interval و max-interval و delta، يتم تطبيق خوارزمية إعادة محاولة فاصل زمني أسي. يزيد وقت الانتظار بين عمليات إعادة المحاولة بشكل كبير وفقاً للصيغة التالية: interval + (2^count - 1) * random(delta * 0.8, delta * 1.2)، حتى الحد الأقصى للفاصل الزمني الذي تم تعيينه بواسطة max-interval.

    على سبيل المثال، عندما interval يتم تعيين كل من و delta إلى 10 ثوان، و max-interval 100 ثانية، يزداد وقت الانتظار التقريبي بين عمليات إعادة المحاولة كما يلي: 10 ثوان، 20 ثانية، 40 ثانية، 80 ثانية، مع استخدام وقت الانتظار 100 ثانية لإعادة المحاولة المتبقية.

عناصر

قد يحتوي النهج retry على أي نهج أخرى كعناصر تابعة لها.

الاستخدام

  • أقسام النهج: واردة وصادرة وخلفية وعند الخطأ
  • نطاقات النهج: العمومية، ومساحة العمل، والمنتج، وواجهة برمجة التطبيقات، والتشغيل
  • البوابات: الكلاسيكية، الإصدار 2، الاستهلاك، المستضافة ذاتيا

الأمثلة

طلب إعادة التوجيه مع إعادة المحاولة الأسية

في المثال التالي، تتم إعادة محاولة إعادة توجيه الطلب حتى عشر مرات باستخدام خوارزمية إعادة المحاولة الأسية. نظرا first-fast-retry لأنه تم تعيين إلى false، تخضع جميع محاولات إعادة المحاولة لأوقات انتظار إعادة المحاولة متزايدة بشكل كبير (في هذا المثال، حوالي 10 ثوان، 20 ثانية، 40 ثانية، ...)، حتى الحد الأقصى لانتظار .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>

إرسال الطلب عند فشل الطلب الأولي

في المثال التالي، تتم إعادة محاولة إرسال طلب إلى عنوان URL بخلاف الواجهة الخلفية المحددة حتى ثلاث مرات في حالة انقطاع / انتهاء مهلة الاتصال، أو يؤدي الطلب إلى حدوث خطأ من جانب الخادم. بما first-fast-retry أنه تم تعيين إلى صواب، يتم تنفيذ إعادة المحاولة الأولى مباشرة عند فشل الطلب الأولي. لاحظ أنه send-request يجب تعيين ignore-error إلى tصواب لكي response-variable-name تكون خالية في حالة حدوث خطأ.


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

لمزيد من المعلومات حول العمل مع النُهج، راجع: