عیب‌یابی خطای زمان اجرای خط‌مشی «مهار جهش»

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

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

    برای مثال، فرض کنید خط‌مشی جاوا اسکریپت قبل‌از خط‌مشی «مهار جهش» برای تنظیم متغیر 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");
}

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 باشد، که یعنی ۵۰۰ تماس در دقیقه. به‌همین ترتیب، مقدار 10ps یعنی ۱۰ تماس در ثانیه.

تشخیص

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

    برای مثال، خط‌مشی زیر عنصر را با مرجع به‌نام 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. تعیین کنید که آیا متغیر در جریانی که خط‌مشی «مهار جهش» در آن اجرا می‌شود تعریف و دردسترس است یا نه.

  4. اگر متغیر یکی از این موارد باشد:

    • خارج از محدوده (در جریان خاصی که خط‌مشی در آن اجرا می‌شود دردسترس نیست) یا
    • قابل‌حل نیست (تعریف نشده است)

    در این صورت، این دلیل خطا است.

    در مثال نشان‌داده‌شده در بالا، مقدار نرخ توقف جهش در عنصر <Rate> باید از سرایند درخواست با نام نرخ بازیابی شود. بااین‌حال، Edge نمی‌تواند request.header.rate را حل‌وفصل کند. این اتفاق زمانی رخ می‌دهد که سرایند نرخ به‌عنوان بخشی از درخواست API ارسال نشود.

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

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

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

    policies.ratelimit.FailedToResolveSpikeArrestRate
    

وضوح

مطمئن شوید متغیر ارجاع‌شده در عنصر <Rate> وجود داشته باشد/تعریف شده باشد و در جاری‌سازی خاصی که خط‌مشی «مهار جهش» در آن اجرا می‌شود دردسترس باشد.

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

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