הדף הזה רלוונטי ל-Apigee ול-Apigee Hybrid.
לעיון במסמכי התיעוד של Apigee Edge
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 (ערך לא שלם), השגיאה תתרחש.
אבחון
מזהים את הערך הלא תקין שמשמש לרכיב
<MessageWeight>במדיניות Spike Arrest. אפשר למצוא את המידע הזה ברכיבfaultstringשל תגובת השגיאה. לדוגמה, בשגיאה הבאה, הערך הלא תקין שמשמש לרכיב<MessageWeight>הוא1.5:"faultstring": "Invalid message weight value 1.5"בודקים את כל כללי המדיניות של הגבלת תנועה פתאומית ב-API Proxy הספציפי שבו התרחשה השגיאה. יכול להיות שיש כללי מדיניות של הגבלת תנועה פתאומית שבהם צוין הרכיב
<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>של מדיניות Spike Arrest שזוהתה. אפשר לחלץ את הערך של משתנה הזרימה מכותרות HTTP, מפרמטרים של שאילתות, ממטען ייעודי (payload) של בקשת XML או JSON, או להגדיר אותו במדיניות אחרת.- מאתרים את הקוד ב-proxy ל-API, שבו הוגדר המשתנה לראשונה.
- אחרי שמגלים באיזו מדיניות המשתנה מוגדר ומאוכלס לראשונה, בודקים איך הערך של המשתנה מוגדר.
- אם הערך של משתנה הזרימה תואם לערך שזוהה בשלב 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 שיחות בשנייה.
אבחון
מזהים את מדיניות Spike Arrest שבה התרחשה השגיאה ואת שם ההפניה שלא ניתן לפתור בצורה תקינה. אפשר למצוא את שני הפריטים האלה ברכיב faultstring של תגובת השגיאה.
לדוגמה, במחרוזת השגיאה הבאה, שם המדיניות הוא
SpikeArrest_AuthProxyוההפניה היאrequest.header.rate:"faultstring": "Failed to resolve Spike Arrest Rate reference request.header.rate in SpikeArrest policy SpikeArrest_AuthProxy"ב-XML של מדיניות Spike Arrest שנכשלה, מוודאים שהשם של ההפניה שבה נעשה שימוש זהה לשם ההפניה שצוין במחרוזת השגיאה (שלב 1 למעלה). ** **
לדוגמה, במדיניות הבאה מוגדר אלמנט
<Rate>עם ההפניה בשם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>בודקים אם המשתנה מוגדר וזמין בתהליך העבודה שבו מופעלת מדיניות Spike Arrest.
אם המשתנה הוא:
- לא נכלל בהיקף (לא זמין בתהליך הספציפי שבו המדיניות מופעלת) או
- לא ניתן לפתור (לא מוגדר)
אז זה הגורם לשגיאה.
בדוגמה שמוצגת למעלה, הערך של שיעור העלייה הפתאומי ב-
<Rate>אמור להישלף מכותרת הבקשה שנקראת rate. עם זאת, Apigee לא יכול לפתור את request.header.rate. השגיאה הזו מתרחשת אם הכותרת rate לא מועברת כחלק מבקשת ה-API.לפניכם בקשת API לדוגמה שלא כוללת את הכותרת rate כחלק מהבקשה:
curl -v http://your_host_alias/check_spikearrest -H "Content-Type: application/json"
your_host_alias הוא דומיין שפונה לציבור ומשמש לגישה לממשקי ה-API, כפי שהוגדר במאפיין
virtualhosts.hostAliasesבקובץ ההחלפות. מידע נוסף זמין במאמר בנושא ציון החלפות של הגדרות.מכיוון שהכותרת rate לא מועברת כחלק מהבקשה, ההפניה אל request.header.rate שמשמשת ברכיב
<Rate>במדיניות Spike Arrest שלמעלה לא מוגדרת, ולכן אי אפשר לפתור אותה. לכן תקבלו את קוד השגיאה:policies.ratelimit.FailedToResolveSpikeArrestRate
רזולוציה
מוודאים שהמשתנה שאליו מתייחסים ברכיב <Rate> קיים או מוגדר וזמין בתהליך הספציפי שבו מופעלת מדיניות Spike Arrest.
כדי לתקן את הדוגמה שמוצגת למעלה, אפשר לשנות את הבקשה כך שתכלול את הכותרת rate כמו בדוגמה הבאה:
curl -v http://your_host_alias/check_spikearrest -H "Content-Type: application/json" -H "rate:30ps"
your_host_alias הוא דומיין שפונה לציבור ומשמש לגישה לממשקי ה-API, כפי שהוגדר במאפיין virtualhosts.hostAliases בקובץ ההחלפות. מידע נוסף זמין במאמר בנושא ציון החלפות של הגדרות.