אתם צופים במסמכי התיעוד של 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 (ערך לא שלם), השגיאה תתרחש.
אבחון
מזהים את הערך הלא חוקי שמשמש לרכיב
<MessageWeight>במדיניות Spike Arrest. המידע הזה מופיע ברכיבfaultstringשל תגובת השגיאה. לדוגמה, בשגיאה הבאה, הערך הלא תקין שמשמש לרכיב<MessageWeight>הוא1.5:"faultstring": "Invalid message weight value 1.5"בודקים את כל כללי המדיניות של 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>קובעים את הערך של המשתנה שמשמש ברכיב
<MessageWeight>של מדיניות מניעת העלייה הפתאומית שזוהתה. אפשר לחלץ את הערך של משתנה הזרימה מכותרות 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 למעלה). ** **
לדוגמה, במדיניות הבאה מוגדר
רכיב עם ההפניה בשם 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. עם זאת, Edge לא יכול לפתור את request.header.rate. השגיאה הזו מתרחשת אם הכותרת rate לא מועברת כחלק מבקשת ה-API.הנה דוגמה לבקשת API שלא כוללת את הכותרת rate כחלק מהבקשה:
curl -v http://jdoe-eval-test.apigee.net/check_spikearrest -H "Content-Type: application/json"מכיוון שהכותרת rate לא מועברת כחלק מהבקשה, ההפניה request.header.rate שמשמשת ברכיב
<Rate>במדיניות Spike Arrest שלמעלה לא מוגדרת, ולכן אי אפשר לפתור אותה. לכן תקבלו את קוד השגיאה:policies.ratelimit.FailedToResolveSpikeArrestRate
רזולוציה
צריך לוודא שהמשתנה שאליו יש הפניה ברכיב <Rate> קיים או מוגדר וזמין בתהליך הספציפי שבו מופעלת מדיניות Spike Arrest.
כדי לתקן את הדוגמה שמוצגת למעלה, אפשר לשנות את הבקשה כך שתכלול את הכותרת rate כמו שמוצג למטה:
curl -v http://jdoe-eval-test.apigee.net/check_spikearrest -H "Content-Type: application/json" -H "rate:30ps"