عیب یابی خطای زمان اجرا خط مشی Spike Arrest

شما در حال مشاهده مستندات Apigee Edge هستید.
به مستندات Apigee X مراجعه کنید .
اطلاعات

وزن پیام نامعتبر

کد خطا

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. مقدار نامعتبر استفاده شده برای عنصر <MessageWeight> در سیاست Spike Arrest را شناسایی کنید. می‌توانید این اطلاعات را در عنصر faultstring پاسخ خطا پیدا کنید. برای مثال، در خطای زیر، مقدار نامعتبر استفاده شده برای عنصر <MessageWeight> 1.5 است:

    "faultstring": "Invalid message weight value 1.5"
    
  2. تمام سیاست‌های Spike Arrest را در API Proxy خاصی که خرابی در آن رخ داده است، بررسی کنید. ممکن است یک یا چند سیاست 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. کد را در پروکسی API، جایی که متغیر ابتدا تعریف شده است، پیدا کنید.
    2. وقتی که متوجه شدید متغیر در چه سیاستی تعریف و مقداردهی شده است، بررسی کنید که مقدار متغیر چگونه تنظیم شده است.
    3. اگر مقدار متغیر جریان با مقداری که در مرحله ۱ بالا مشخص شده است مطابقت داشته باشد، علت خطا همین است.

    برای مثال، فرض کنید که یک سیاست جاوا اسکریپت قبل از سیاست 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 را در جاوا اسکریپت به یک عدد صحیح تغییر دهید:

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

حل نشدSpikeArrestRate

کد خطا

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 که با شکست مواجه شده است، بررسی کنید که نام مرجع استفاده شده با نام مرجع شناسایی شده در رشته خطا (مرحله ۱ در بالا) مطابقت داشته باشد. ** **

    برای مثال، سیاست زیر موارد زیر را تعیین می‌کند عنصری با مرجعی به نام 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 نیست. این اتفاق در صورتی رخ می‌دهد که header rate به عنوان بخشی از درخواست API ارسال نشود.

    در اینجا یک نمونه درخواست API آورده شده است که نرخ هدر را به عنوان بخشی از درخواست ارسال نمی‌کند:

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

    از آنجایی که نرخ هدر به عنوان بخشی از درخواست ارسال نمی‌شود، ارجاع request.header.rate که در عنصر <Rate> در سیاست Spike Arrest فوق استفاده شده است، تعریف نشده است و از این رو قابل حل نیست. بنابراین کد خطای زیر را دریافت خواهید کرد:

    policies.ratelimit.FailedToResolveSpikeArrestRate
    

وضوح تصویر

مطمئن شوید که متغیر ارجاع‌شده در عنصر <Rate> در جریان خاصی که سیاست Spike Arrest در آن اجرا می‌شود، وجود دارد/تعریف شده و در دسترس است.

برای اصلاح مثال نشان داده شده در بالا، می‌توانید درخواست را طوری تغییر دهید که هدر نرخ را مانند شکل زیر شامل شود:

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