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

شما در حال مشاهده اسناد 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> در خط مشی 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. کد را در پروکسی API، جایی که متغیر ابتدا تعریف شده است، قرار دهید.
    2. هنگامی که سیاستی را که ابتدا متغیر در آن تعریف و پر شده است را مشخص کردید، بررسی کنید که مقدار متغیر چگونه تنظیم شده است.
    3. اگر مقدار متغیر جریان با مقدار مشخص شده در مرحله شماره 1 در بالا مطابقت داشته باشد، این دلیل خطا است.

    به عنوان مثال، فرض کنید که یک خط مشی جاوا اسکریپت قبل از Spike Arrest Policy برای تنظیم متغیر 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> به مقداری در خط مشی Spike Arrest قابل حل نباشد. این عنصر اجباری است و برای تعیین نرخ توقف سنبله به صورت {int}pm یا {int}ps استفاده می‌شود. برای مثال، {int}pm ممکن است 500pm باشد، که به معنای 500 تماس در دقیقه است. به همین ترتیب، مقدار 10ps به معنای 10 تماس در ثانیه است.

تشخیص

  1. خط مشی Spike Arrest را در جایی که خطا رخ داده است و نام مرجعی که به درستی قابل حل نیست را شناسایی کنید. شما می توانید هر دوی این موارد را در عنصر رشته خطای پاسخ خطا پیدا کنید.

    به عنوان مثال، در رشته خطای زیر، نام سیاست SpikeArrest_AuthProxy و مرجع request.header.rate است:

    "faultstring": "Failed to resolve Spike Arrest Rate reference request.header.rate in SpikeArrest policy SpikeArrest_AuthProxy"
    
  2. در خط مشی شکست Spike Arrest 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. تعیین کنید که آیا متغیر در جریانی که در آن خط مشی Spike Arrest اجرا می شود، تعریف شده و موجود است یا خیر.

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

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

    پس این دلیل خطا است.

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