تحديد وحلّ المشاكل المتعلقة بخطأ وقت تشغيل سياسة إيقاف رصد الارتفاع

أنت تطّلع على مستندات Apigee Edge.
انتقِل إلى مستندات Apigee X.
info

InvalidMessageWeight

رمز الخطأ

policies.ratelimit.InvalidMessageWeight

نص الاستجابة للخطأ

{
    "fault": {jdoe
        "faultstring": "Invalid message weight value [invalid_value]",
        "detail": {
            "errorcode": "policies.ratelimit.InvalidMessageWeight"
        }
    }
}

مثال على رسالة خطأ

{
    "fault": {
        "faultstring": "Invalid message weight value 1.5",
        "detail": {
            "errorcode": "policies.ratelimit.InvalidMessageWeight"
        }
    }
}

السبب

يحدث هذا الخطأ إذا كانت القيمة المحدّدة للعنصر <MessageWeight> من خلال متغيّر مسار غير صالحة (قيمة غير صحيحة).

على سبيل المثال، إذا كانت قيمة متغيّر التدفق المحدّدة للعنصر <MessageWeight> هي 1.5 (قيمة ليست عددًا صحيحًا)، سيحدث الخطأ.

التشخيص

  1. حدِّد القيمة غير الصالحة المستخدَمة للعنصر <MessageWeight> في سياسة Spike Arrest. يمكنك العثور على هذه المعلومات في العنصر faultstring لاستجابة الخطأ. على سبيل المثال، في الخطأ التالي، القيمة غير الصالحة المستخدَمة للعنصر <MessageWeight> هي 1.5:

    "faultstring": "Invalid message weight value 1.5"
    
  2. راجِع جميع سياسات إيقاف الطلبات المرتفعة في خادم وكيل واجهة برمجة التطبيقات المحدّد الذي حدث فيه تعذُّر. قد تكون هناك سياسة واحدة أو أكثر من سياسات إيقاف الارتفاعات المفاجئة في عدد الزيارات التي يتم فيها تحديد <MessageWeight>.

    على سبيل المثال، تحدّد السياسة التالية قيمة <MessageWeight> من خلال متغيّر مسار يُسمى message_weight:.

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
        <SpikeArrest async="false" continueOnError="false" enabled="true" name="SpikeArrest_AuthProxy">
        <DisplayName>SpikeArrest_AuthProxy</DisplayName>
        <Properties/>
        <Identifier ref="request.header.some-header-name"/>
        <Rate>100ps</Rate>
        <MessageWeight ref="message_weight"/>
    </SpikeArrest>
    
  3. حدِّد قيمة المتغيّر المستخدَم في عنصر <MessageWeight> من سياسات إيقاف الارتفاعات المفاجئة في عدد الزيارات التي تم تحديدها. يمكن استخراج قيمة متغيّر مسار الإحالة الناجحة من عناوين HTTP أو مَعلمات طلب البحث أو الحمولة في طلب XML أو JSON، أو يمكن تحديدها في سياسة أخرى.

    1. حدِّد مكان الرمز ضمن الوكيل لواجهة برمجة التطبيقات، حيث تم تعريف المتغيّر أولاً.
    2. بعد تحديد السياسة التي تم فيها تعريف المتغيّر وgefüllt أولاً، تحقّق من كيفية ضبط قيمة المتغيّر.
    3. إذا كانت قيمة متغيّر مسار الإحالة الناجحة تتطابق مع القيمة المحدّدة في الخطوة #1 أعلاه، هذا يعني أنّها سبب الخطأ.

    على سبيل المثال، لنفترض أنّه يتم استخدام سياسة JavaScript قبل سياسة معالجة الطلبات المتزايدة لضبط المتغيّر message_weight استنادًا إلى طريقة الطلب كما هو موضح أدناه:

    var verb = context.getVariable("request.verb");
    context.setVariable("message_weight", "1.5");
    if (verb == 'POST') {
      context.setVariable("message_weight", "2");
    }
    

    لاحظ أن قيمة المتغير message_weight هي 1.5 وهي قيمة غير صالحة (ليست عددًا صحيحًا).

الدقة

تأكَّد من أنّ قيمة عنصر MessageWeight هي قيمة صالحة (عدد صحيح قيمة).

لتصحيح المثال أعلاه، يمكنك تعديل قيمة المتغيّر message_weight في JavaScript لتكون عددًا صحيحًا:

var verb = context.getVariable("request.verb");
context.setVariable("message_weight", "1");
if (verb == 'POST') {
  context.setVariable("message_weight", "2");
}

FailedToResolveSpikeArrestRate

رمز الخطأ

policies.ratelimit.FailedToResolveSpikeArrestRate

نص الاستجابة للخطأ

{
    "fault": {
        "faultstring": "Failed to resolve Spike Arrest Rate reference [reference] in SpikeArrest policy [api_policy]",
        "detail": {
            "errorcode": "policies.ratelimit.FailedToResolveSpikeArrestRate"
        }
    }
}

مثال على رسالة خطأ

{
    "fault": {
        "faultstring": "Failed to resolve Spike Arrest Rate reference request.header.rate in SpikeArrest policy SpikeArrest_AuthProxy",
        "detail": {
            "errorcode": "policies.ratelimit.FailedToResolveSpikeArrestRate"
        }
    }
}

السبب

يحدث هذا الخطأ إذا تعذّر تحويل المرجع إلى المتغيّر الذي يحتوي على إعداد المعدّل ضمن العنصر <Rate> إلى قيمة ضمن سياسة Spike Arrest. هذا العنصر إلزامي ويُستخدَم لتحديد معدّل إيقاف الارتفاعات المفاجئة في شكل {int}pm أو {int}ps. على سبيل المثال، قد يكون {int}pm هو 500pm، ما يعني 500 مكالمة في الدقيقة. وبالمثل، تعني القيمة 10ps 10 طلبات في الثانية.

التشخيص

  1. حدد سياسة Spike Arrest التي حدث فيها الخطأ واسم المرجع الذي لا يمكن حله بشكل صحيح. يمكنك العثور على كلا العنصرَين في عنصر faultstring ضمن استجابة الخطأ.

    على سبيل المثال، في سلسلة الأخطاء التالية، اسم السياسة هو SpikeArrest_AuthProxy والمرجع هو request.header.rate:

    "faultstring": "Failed to resolve Spike Arrest Rate reference request.header.rate in SpikeArrest policy SpikeArrest_AuthProxy"
    
  2. في ملف XML لسياسة Spike Arrest التي تعذّر تنفيذها، تأكَّد من أنّ اسم المرجع المستخدَم يتطابق مع اسم المرجع المحدّد في سلسلة الخطأ (الخطوة 1 أعلاه). ** **

    على سبيل المثال، تضبط السياسة التالية عنصر باستخدام المرجع الذي يحمل الاسم request.header.rate، والذي يتطابق مع ما هو وارد في سلسلة الأخطاء:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
        <SpikeArrest async="false" continueOnError="false" enabled="true" name="SpikeArrest_AuthProxy">
        <DisplayName>SpikeArrest_AuthProxy</DisplayName>
        <Properties/>
        <Identifier ref="request.header.some-header-name"/>
        <Rate ref="request.header.rate"/>
    </SpikeArrest>
    
    
  3. حدِّد ما إذا كان المتغير محدّدًا ومتاحًا في التدفق الذي يتم فيه تنفيذ سياسة سباك سبايك.

  4. إذا كان المتغيّر:

    • خارج النطاق (غير متوفّر في العملية المحدّدة التي يتم تنفيذ السياسة فيها)
    • يتعذّر حلها (غير محدّد)

    هذا هو سبب الخطأ.

    في المثال أعلاه، من المفترض أن يتم استرداد قيمة معدّل إيقاف الارتفاعات في العنصر <Rate> من عنوان الطلب الذي يحمل الاسم rate. ومع ذلك، يتعذّر على Edge معالجة request.header.rate. ويحدث ذلك في حال عدم تمرير معدّل العنوان كجزء من طلب البيانات من واجهة برمجة التطبيقات.

    في ما يلي نموذج لطلب بيانات من واجهة برمجة التطبيقات لا يُرسل العنوان rate كجزء من الطلب:

        curl -v http://jdoe-eval-test.apigee.net/check_spikearrest -H "Content-Type: application/json"
    

    بما أنّ العنوان rate لا يتم تمريره كجزء من الطلب، يُرجى الإشارة إلى request.header.rate المستخدَم في العنصر <Rate> في سياسة "سبايك آرت" أعلاه غير محدّدة وبالتالي لا يمكن حلّها. وبالتالي، سيصلك رمز الخطأ التالي:

    policies.ratelimit.FailedToResolveSpikeArrestRate
    

الدقة

تأكَّد من توفّر المتغيّر المُشار إليه في عنصر <Rate> وتمّ تعريفه في العملية المحدّدة التي يتم فيها تنفيذ سياسة "إيقاف الارتفاعات المفاجئة في عدد الزيارات".

لتصحيح المثال أعلاه، يمكنك تعديل الطلب لتضمين العنوان rate كما هو موضّح أدناه:

curl -v  http://jdoe-eval-test.apigee.net/check_spikearrest -H "Content-Type: application/json" -H "rate:30ps"