درحال مشاهده اسناد 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>
برابر با ۱٫۵ (مقدار غیرصحیح) باشد، خطا رخ میدهد.
تشخیص
مقدار نامعتبر استفادهشده برای عنصر
<MessageWeight>در خطمشی «مهار جهش» را شناسایی کنید. میتوانید این اطلاعات را در عنصرfaultstringپاسخ خطا پیدا کنید. برای مثال، در خطای زیر، مقدار نامعتبر استفادهشده برای عنصر<MessageWeight>1.5است:"faultstring": "Invalid message weight value 1.5"همه خطمشیهای «مهار جهش» را در «پراکسی 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>مقدار متغیر استفادهشده در عنصر
<MessageWeight>از خطمشی(های) شناساییشده «مهار جهش» را تعیین کنید. مقدار متغیر جاری میتواند از سرایندهای HTTP، پارامترهای پُرسمان، بار درخواست XML یا JSON، یا در خطمشی دیگری تعریف شود.- کد را در پراکسی API، جایی که متغیر برای اولینبار تعریف شده است، پیدا کنید.
- پساز اینکه خطمشیای را که متغیر در آن تعریف و ابتدا تکمیل شده است پیدا کردید، بررسی کنید مقدار متغیر چگونه تنظیم شده است.
- اگر مقدار متغیر جاری با مقدار شناساییشده در «مرحله ۱» در بالا مطابقت داشته باشد، آن مقدار دلیل خطا است.
برای مثال، فرض کنید خطمشی جاوا اسکریپت قبلاز خطمشی «مهار جهش» برای تنظیم متغیر
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 یعنی ۱۰ تماس در ثانیه.
تشخیص
خطمشی «مهار جهش» را که خطا در آن رخ داده است و نام مرجعی را که نمیتواند بهدرستی حلوفصل شود شناسایی کنید. هر دوی این موارد را میتوانید در عنصر faultstring پاسخ خطا پیدا کنید.
برای مثال، در faultstring زیر، نام خطمشی
SpikeArrest_AuthProxyو مرجعrequest.header.rateاست:"faultstring": "Failed to resolve Spike Arrest Rate reference request.header.rate in SpikeArrest policy SpikeArrest_AuthProxy"در 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>تعیین کنید که آیا متغیر در جریانی که خطمشی «مهار جهش» در آن اجرا میشود تعریف و دردسترس است یا نه.
اگر متغیر یکی از این موارد باشد:
- خارج از محدوده (در جریان خاصی که خطمشی در آن اجرا میشود دردسترس نیست) یا
- قابلحل نیست (تعریف نشده است)
در این صورت، این دلیل خطا است.
در مثال نشاندادهشده در بالا، مقدار نرخ توقف جهش در عنصر
<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"