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

أنت الآن بصدد الاطّلاع على مستندات 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. افحص جميع سياسات Spike Arrest في خادم API الوكيل المحدّد الذي حدث فيه الخطأ. يمكن أن تتضمّن سياسة واحدة أو أكثر من سياسات 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> من سياسات Spike Arrest المحدّدة يمكن استخراج قيمة متغيّر التدفق من عناوين HTTP أو مَعلمات طلب البحث أو حمولة طلب XML أو JSON، أو يمكن تحديدها في سياسة أخرى.

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

    على سبيل المثال، لنفترض أنّه يتم استخدام سياسة JavaScript قبل سياسة Spike Arrest لضبط المتغيّر 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 ضمن رد الخطأ.

    على سبيل المثال، في 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، والذي يتطابق مع ما هو موجود في faultstring:

    <?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. تحديد ما إذا كان المتغير محدّدًا ومتاحًا في التدفق الذي يتم فيه تنفيذ سياسة Spike Arrest.

  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 Arrest أعلاه غير محدّد، وبالتالي لا يمكن حله. لذلك، سيصلك رمز الخطأ التالي:

    policies.ratelimit.FailedToResolveSpikeArrestRate
    

الدقة

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

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

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