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

يتم الآن عرض مستندات Apigee Edge.
انتقِل إلى مستندات Apigee X.
المعلومات

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> في سياسة إيقاف تسجيل الارتفاع. يمكنك العثور على هذه المعلومات في العنصر faultstring لاستجابة الخطأ. في الخطأ التالي مثلاً، القيمة غير الصالحة المستخدَمة للعنصر <MessageWeight> هي 1.5:

    "faultstring": "Invalid message weight value 1.5"
    
  2. افحص جميع سياسات Spike Arrest في الخادم الوكيل لواجهة برمجة التطبيقات المحدّد الذي حدث به الخطأ. قد تكون هناك سياسة واحدة أو أكثر من سياسات "منع الارتفاع" التي يتم فيها تحديد العنصر <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. بمجرد معرفة السياسة التي يتم فيها تحديد المتغير وتعبئته أولاً، تحقق من كيفية تعيين قيمة المتغير.
    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> إلى قيمة ضمن سياسة "منع الارتفاع". إنّ هذا العنصر إلزامي ويُستخدَم لتحديد معدل إيقاف التشغيل المفاجئ، والذي قد يكون {int}pm أو {int}ps. على سبيل المثال، قد تكون قيمة السمة {int}pm 500pm، مما يعني 500 اتصال في الدقيقة. وبالمثل، تعني القيمة 10ps 10 استدعاءات في الثانية.

التشخيص

  1. حدِّد سياسة منع الارتفاع المفاجئ التي حدث فيها الخطأ واسم المرجع الذي لا يمكن حلّه بشكل صحيح. يمكنك العثور على هذين العنصرين في عنصر talstring لاستجابة الخطأ.

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

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

    في ما يلي نموذج لطلب بيانات من واجهة برمجة التطبيقات لا يتخطى rate (معدّل الضريبة) في العنوان كجزء من الطلب:

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

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

    policies.ratelimit.FailedToResolveSpikeArrestRate
    

درجة الدقّة

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

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

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